二叉搜索树与双向链表(java版)
来源:互联网 发布:php开发mac应用 编辑:程序博客网 时间:2024/04/30 12:54
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
分析:
对于二叉搜索树,用中序搜索算法挺适合。考虑每个子树子节点作为三部分,这里以根结点为特殊例子进行阐述
递归实现,每次用一个lastNode存放上一个子树的最后一个结点,该结点是上个已排好子树的最大的结点。
因此此时对于结点10来说,只需要建立与8之间的联系。
代码如下:
<span style="font-size:14px;">public TreeNode Convert(TreeNode pRootOfTree) { //按照中序遍历的方式递归 TreeNode p=pRootOfTree; TreeNode lastNode=null; MiddleFind(p,lastNode); //lastNode现在指向了最后的结点 while(lastNode!=null&&lastNode.left!=null){ lastNode=lastNode.left; } return lastNode; } public void MiddleFind(TreeNode p,TreeNode LastNode) {if(p==null) return;MiddleFind(p.left,LastNode);//对每个结点类似中序进行操作,每次只管左边的两个链 p.left=lastNode; if(lastNode!=null) lastNode.right=p;lastNode=p;MiddleFind(p.right,LastNode);}</span>这样不知道为嘛lastNode的值传不过来,java 中对象的传递不是传地址,形参变化会影响实参么,感觉有点奇怪,于是改动了下
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { TreeNode lastNode=null;//指向上一个子树的,设为全局的(奇怪,java中对象也是引用呀) public TreeNode Convert(TreeNode pRootOfTree) { //按照中序遍历的方式递归 TreeNode p=pRootOfTree; // TreeNode lastNode=null; MiddleFind(p); //lastNode现在指向了最后的结点 while(lastNode!=null&&lastNode.left!=null){ lastNode=lastNode.left; } return lastNode; } public void MiddleFind(TreeNode p) {if(p==null) return;MiddleFind(p.left);//对每个结点类似中序进行操作,每次只管左边的两个链 p.left=lastNode; if(lastNode!=null) lastNode.right=p;lastNode=p;MiddleFind(p.right); }}
1 0
- 二叉搜索树与双向链表(java版)
- 二叉搜索树与双向链表Java
- 二叉搜索树与双向链表(Java实现)
- 二叉搜索树与双向链表java实现
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 数学分析笔记-菲赫金哥尔茨-第一卷-极限论
- jdbc底层
- c++实验2-标准体重
- 关于mybatis标签属性说明
- 开源代码文献
- 二叉搜索树与双向链表(java版)
- CCS v5.0打开项目文件时出现错误:“The project description file (.project) for 'test_ad' is missing. This file c”
- Unity3D教程系列 新手入门,中度进阶神器
- c语言:顺序栈的实现
- 编程语言NodeJSの进阶MongDB操作
- 数据流重定向
- 明明的随机数
- 2.Servlet线程安全和ServletConfig以及其它用法
- 【09类和模块】——4:类的扩充