题目
思路
- 把二叉搜索树转为循环双向链表
- 中序遍历递归实现
代码
class Solution {
Node pre, head;//pre节点表示前一个节点,head为头节点
public Node treeToDoublyList(Node root) {
if (root == null) return head;//特判
dfs(root);
head.left = pre;//头连到尾,dfs截止后,pre停在最后一个节点
pre.right = head;//尾连到头
return head;
}
//中序遍历
public void dfs(Node root) {
if (root == null) {
return;
}
dfs(root.left);//
if (pre == null) { // 一开始一直向左搜索,pre一直未初始化,为null
head = root;//没有pre了,说明当前节点是head
} else {
pre.right = root;//前一个节点指向当前节点
root.left = pre;//当前节点指向前一个节点
}
pre = root;//更新pre为当前节点
dfs(root.right);//
}
}