Convert BST to double-linked list in in-order traversal
要點就是要熟練 in-order traversal,不管是遞迴或非遞迴
// non recursive
public DoublyListNode bstToDoublyList(TreeNode root) {
if (root == null) {
return null;
}
Stack<TreeNode> S = new Stack<>();
DoublyListNode dummy = new DoublyListNode(-1);
DoublyListNode newHead = null;
TreeNode cur = root;
cur = root;
while (true) {
while (cur != null) {
S.push(cur);
cur = cur.left;
}
if (S.isEmpty())
break;
cur = S.pop();
dummy.next = new DoublyListNode(cur.val);
dummy.next.prev = dummy;
dummy = dummy.next;
if (newHead == null) {
newHead = dummy;
}
cur = cur.right;
}
return newHead;
}
// recursive