题目描述
题解
中序遍历:
- pre记录前一个节点,cur记录当前节点
- 当pre != null 时,
pre.right = cur , cur.left = pre
- 我们还需要记录头节点和尾节点,把链表变成循环链表
- 当pre == null的时候,当前cur就是头节点
- 当遍历结束时, pre所指向的就是最后一个节点,直接连接就可以,详见代码注释
class Solution {
Node cur = null;
Node pre = null;
Node head = null;
public Node treeToDoublyList(Node root) {
if (root == null) return null;
dfs(root);
//连接头尾节点
pre.right = head;
head.left = pre;
return head;
}
public void dfs(Node root){
if (root == null) return;
//中序遍历
dfs(root.left);
cur = root;
//pre != null,说明是中间节点,pre和cur连接
if (pre != null){
cur.left = pre;
pre.right = cur;
}else{
//pre == null,此时刚开始遍历,cur就是head
head = cur;
}
pre = cur;
dfs(root.right);
}
}