思路:
- 二叉搜索树中序遍历即为有序
- 找到最左子树节点,作为头节点head
- 关键步骤:
- 当 pre为空时: 代表正在访问链表头节点,记为 head
- 当 pre不为空时: 修改双向节点引用,即 pre.right = cur,cur.left=pre
- 保存 cur : 更新 pre = cur ,即节点 cur是后继节点的 pre ;
class Solution {
Node head,pre;
public Node treeToDoublyList(Node root) {
if(root==null){
return null;
}
rec(root);
head.left=pre;
pre.right=head;
return head;
}
public void rec(Node cur){
if(cur==null){
return;
}
rec(cur.left);
if(pre==null){
head=cur;
}else{
pre.right=cur;
}
cur.left=pre;
pre=cur;
rec(cur.right);
}
}