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

results matching ""

    No results matching ""