426-Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List
Previous103-Binary-Tree-Zigzag-Level-Order-TraversalNext117-Populating-Next-Right-Pointers-in-Each-Node-II
Last updated
Last updated
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val,Node _left,Node _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
class Solution {
public Node treeToDoublyList(Node root) {
if(root==null){
return root;
}
Node dummy=new Node(-1);
Node pre=null;
Node tail=null;
Node cur=root;
while(cur!=null){
Node most_right=cur.left;
if(most_right!=null){
while(most_right.right!=null && most_right.right!=cur){
most_right=most_right.right;
}
if(most_right.right==null){
most_right.right=cur;
cur=cur.left;
continue;
}
}
//走到这里,表示当前节点我们已经是第二次遇到了
//如果前置节点已经设置好了,那么就调整以下pre与cur之间的指针
if(pre!=null){
cur.left=pre;
//这一句是为了防止没有左子树的节点出现
pre.right=cur;
}
if(pre==null){
dummy.right=cur;
}
pre=cur;
tail=cur;
cur=cur.right;
}
//最后设置以下头节点与尾节点之间的指针
dummy.right.left=tail;
tail.right=dummy.right;
return dummy.right;
}
}