标签:结点 null TreeNode 链表 二叉树 双向 prev root left
二叉搜索树与双向链表
链接:二叉搜索树与双向链表
思路:
由题目可以看出
:
转换成功后,链表中的第一个结点(头结点)就是二叉搜索树的最左侧的结点;
方法:
中序遍历,将树中每个结点的左右引用重新指向,
left
指向前一个结点,right
指向后一个结点;因此就需要一个prev
来标记刚刚遍历过的结点。
中序遍历时: (1) 先遍历左子树(2)再遍历根结点(操作
:给根结点的左右引用重新赋值)(3)最后遍历右子树
代码实现
:
public class Solution {
TreeNode prev=null;
public void ConvertTree2List(TreeNode root){
if(root==null){
return ;
}
ConvertTree2List(root.left);
root.left=prev;
if(prev!=null){
prev.right=root;
}
prev=root;
ConvertTree2List(root.right);
}
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null){
return null;
}
//找转换之后的第一个结点
TreeNode head=pRootOfTree;
while(head.left!=null){
head=head.left;
}
//修改每个结点的left和right
TreeNode prev=null;
ConvertTree2List(pRootOfTree);
return head;
}
}
标签:结点,null,TreeNode,链表,二叉树,双向,prev,root,left 来源: https://blog.csdn.net/m0_52083255/article/details/121584471
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。