二叉搜素树与双向链表(java版)
来源:互联网 发布:android 源码添加apk 编辑:程序博客网 时间:2024/06/05 09:21
【题目描述】输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
注:不能创建新的结点,理解为不能显式的new一个出来。
【解题思路】
//1. 利用中序遍历的思想来完成。
//2. 给定一个指针用来存储中序遍历的第一个节点,作为双向链表的头指针。
//3. 对于遍历到的当前节点,若是第一个节点,则存储起来。否则,将上一个节点的右指针指向当前节点,将当前节点的左指针指向上一个节点。同时将当前节点存储为上一个节点,并继续遍历。
//递归实现public class Solution { private TreeNode head; //中序遍历中上一个节点 private TreeNode tail; //记录中序遍历中第一个节点,即链表的头结点。 public TreeNode Convert(TreeNode pRootOfTree) { inOrder(pRootOfTree); return tail; } public void inOrder(TreeNode root){ if(root == null){ return; } if(root.left != null){ inOrder(root.left); } if(head == null){ head = root; tail = root; }else{ head.right = root; root.left = head; head = root; } if(root.right != null){ inOrder(root.right); } }}
//非递归实现import java.util.Stack; public TreeNode ConvertBSTToBiList(TreeNode root) { if(root==null) return null; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; TreeNode pre = null;// 用于保存中序遍历序列的上一节点 boolean isFirst = true; while(p!=null||!stack.isEmpty()){ while(p!=null){ stack.push(p); p = p.left; } p = stack.pop(); if(isFirst){ root = p;// 将中序遍历序列中的第一个节点记为root pre = root; isFirst = false; }else{ pre.right = p; p.left = pre; pre = p; } p = p.right; } return root; }
阅读全文
0 0
- 二叉搜素树与双向链表(java版)
- 二叉搜索树与双向链表(java版)
- 二叉搜索树与双向链表(Java实现)
- 二叉搜素树与双向链表
- 剑指Offer面试题27(Java版):二叉搜索树与双向链表
- 剑指Offer面试题27(Java版):二叉搜索树与双向链表
- 二叉搜索树与双向链表Java
- 二叉搜索树与双向链表java实现
- 【剑指offer-Java版】27二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表(java)
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- Simpsons’ Hidden Talents (kmp运行题)
- 使用iptables进行NAT配置
- where in 在存储过程中的实现方法
- JavaWeb简介
- 互联网项目特点及高可用架构方案设计
- 二叉搜素树与双向链表(java版)
- js各类正则表达式(中文、字母、数字、全角)
- Java byte数组与十六进制字符串互转
- Java泛型
- java引用粗解
- nagios监控平台
- SQL Server 2008 R2 Developer Edition图文安装教程
- 通过二叉树形式给一个数组排序
- RxjavaforServer