Tree traversal: Preorder traversal non-recursion

可以這樣想:希望在非遞迴的每個回合裡, stack頂會是 root,取完值之後把 root 的右子樹丟進 stack

再丟左子樹,這樣下一回合時 stack 頂才會是剛剛的左子樹。

public void preorderTraversal(TreeNode root) {
    if (root == null) {
        return;
    }

    Stack<TreeNode> s = new Stack<TreeNode>();
    s.push(root);

    while (!s.isEmpty()) {
        TreeNode node = s.pop();
        System.out.print(node.val + " ");
        if (node.right != null) { //
            s.push(node.right);
        }

        // 我们需要先压入右节点,再压入左节点,这样就可以先弹出左节点。 
        if (node.left != null) {
            s.push(node.left);
        }                       
    }
}

results matching ""

    No results matching ""