Toasobi
二叉搜索树与双向链表(中等)
本文最后更新于2023年03月22日,已超过546天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
这道题当时没做出来,其实是已经想到了使用中序遍历(中序遍历得到的结果就是链表的顺序)。但是不知道如何进行链表节点之间的连接。后面也思考到了每个子树的最右节点下一个连接的是根节点,这个其实就是中序遍历的思维
后面看了题解知道了,可以设置两个全局变量,一个head,一个pre。head用于记录最后返回的结果(头节点),pre用于记录每次递归遍历到的节点的前一个节点,用于两点间连接。最后还要将首位相连(head.left = pre; pre.right = head;)此题得解
代码如下:
<div>class Solution {
Node head, pre;
public Node treeToDoublyList(Node root) {
if(root==null) return null;
dfs(root);
head.left = pre;
pre.right = head;
return head;
}
public void dfs(Node root){
if(root==null) return;
dfs(root.left);
if(pre==null){
head = root;
pre = head;
}else{
pre.right = root;
root.left = pre;
pre = root;
}
dfs(root.right);
}
}</div>