


- 在主函数中,递归操作之后,将pre.right = head, head.left = pre含义是将收尾连接起来
- 在递归函数中,终止条件是当cur 为null的时候(如上图2)
- 使用中序遍历来操作
- if(pre == null)head = cur; 当一开始的时候,pre 为null,此时使用 head 来记录cur,因为之后要返回head
- 具体的实现过程见(图3)
class Solution {
Node head, pre;
public Node treeToDoublyList(Node root) {
if(root == null) return null;
dfs(root);
pre.right = head;
head.left = pre;
return head;
}
public void dfs(Node cur){
//截止条件
if(cur == null) return;
dfs(cur.left);
if(pre == null){
head = cur;
}
else {
pre.right = cur;
}
cur.left = pre;
pre = cur;
dfs(cur.right);
}
}
这篇博客探讨了如何通过中序遍历将一棵二叉树转换为双向链表。核心操作是在主函数中,利用递归完成树的遍历,并在递归结束后将首尾节点相连。递归函数的终止条件是遇到空节点。在遍历过程中,通过更新节点的左右指针来构建链表。初始时,如果`pre`为`null`,则用`head`记录当前节点`cur`,否则将`pre`和`cur`连接。整个过程清晰地展示了二叉树到双向链表的转换逻辑。

6199

被折叠的 条评论
为什么被折叠?



