二叉搜索树与双向链表
来源:互联网 发布:行知外国语学校好吗 编辑:程序博客网 时间:2024/05/22 17:58
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
import java.util.Stack;public class ConvertBSTreeToOrderBNode { //非递归方法 public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree == null){ return null; } Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = pRootOfTree; Boolean isFirst = true; TreeNode pHead = null;//排序的双向链表的头节点 TreeNode pre = pHead;// 记录前一个节点 while(p != null || !stack.isEmpty()){ while(p != null){ stack.push(p); p = p.left; } p = stack.pop(); if(isFirst){ pHead = p; pre = p; isFirst = false; } else{ pre.right = p; p.left = pre; pre = p; } p = p.right; } return pHead; } //递归方法 public TreeNode Convert1(TreeNode pRootOfTree){ if(pRootOfTree == null){ return null; } if(pRootOfTree.left == null && pRootOfTree.right == null){ return pRootOfTree; } // 1.将左子树构造成双链表,并返回链表头节点 TreeNode leftHead = Convert(pRootOfTree.left); TreeNode p = leftHead; // 2.定位至左子树双链表最后一个节点 while(p != null && p.right != null){ p = p.right; } // 3.如果左子树链表不为空的话,将当前root追加到左子树链表 if(leftHead != null){ pRootOfTree.left = p; p.right = pRootOfTree; } // 4.将右子树构造成双链表,并返回链表头节点 TreeNode rightHead = Convert(pRootOfTree.right); // 5.如果右子树链表不为空的话,将该链表追加到root节点之后 if(rightHead != null){ rightHead.left = pRootOfTree; pRootOfTree.right = rightHead; } return leftHead != null ? leftHead : pRootOfTree; }}
0 0
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- CMAKE 学习笔记 (二)
- 虚拟视点图像生成012
- python数据分析3:双色球 单个红和蓝球哪个比例高
- 单机版五子棋(JAVA)
- 高效编程之互斥锁和自旋锁
- 二叉搜索树与双向链表
- 第11周补充(2)职员有薪水了!
- 6.5+3
- Android Launcher分析和修改1——Launcher默认界面配置(default_workspace)
- BZOJ3872: [Poi2014]Ant colony
- 递归锁
- 解决No result defined for action action.bookstore.AddInfoAction and result input
- Python之编码规范
- Bagging,AdaBoosting和Gradient boosting