Example 1:
Input: root = [4,2,5,1,3]
Output: [1,2,3,4,5]
思路:Inorder traverse,用stack做;记录一下first 和last node就可以了;最后返回dummpy.right;
错误点:没有想到用dummpy,作为cur node来用;
/*
// 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 null;
}
Stack<Node> stack = new Stack<>();
pushLeft(root, stack);
Node first = null;
Node last = null;
Node pre = null;
while(!stack.isEmpty()) {
Node node = stack.pop();
// get first;
if(first == null) {
first = node;
}
// get last;
if(stack.isEmpty()) {
last = node;
}
// connect middle node;
if(pre != null) {
pre.right = node;
node.left = pre;
}
pre = node;
if(node.right != null) {
pushLeft(node.right, stack);
}
}
first.left = last;
last.right = first;
return first;
}
private void pushLeft(Node node, Stack<Node> stack) {
while(node != null) {
stack.push(node);
node = node.left;
}
}
}