Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.

Example Given binary tree {1,#,2,3},

 1
    \
     2
    /
   3

return [3,2,1].

Solution: Recursive is easy, here is iterative with stack. Push all left tree first and traverse, then push right tree and traverse. Root traverse finally.

public ArrayList<Integer> postorderTraversal(TreeNode root) {
    if(root == null) {
        return new ArrayList<>();
    }
    Stack<TreeNode> stack = new Stack<TreeNode>();
    ArrayList<Integer> res = new ArrayList<Integer>();
    stack.push(root); 
    TreeNode p = root, pre = null;
    while(!stack.isEmpty()) {
        TreeNode top = stack.peek();
        if(top.left == null && top.right == null || (pre != null &&(top.left == pre || top.right == pre))) {
            res.add(top.val);
            stack.pop();
            pre = top;
        } 
        else {
            if(top.right != null) {
                stack.push(top.right);
            }
            if(top.left != null) {
                stack.push(top.left);
            }
        }
    }
    return res;
}

results matching ""

    No results matching ""