Problem statement:

[Leetcode] Binary Tree Postorder Traversal

Thought: Since TreeNode has a self-recursive structure, it's very natural and easy to come up with a recursive implement. But the tricky part is how to implement this using a iterative method. The three binary tree traversal methods: pre-order, in-order and post-order can all be regarded as Depth First Search, and we know the iterative version of DFS makes use of a stack. So maybe we can also use a stack to solve this problem.

Because this problem is postorder, the relative position of node, left subtree, right subtree should be like this:

[Leetcode] Binary Tree Postorder Traversal

In-order traversal is similar, siwtching position of Right and Node in the above picture.

Pre-order is the simplest of three, just run iterative-DFS on the root node.

public class Binary_tree_postorder_traversal {

    public ArrayList<Integer> postorderTraversal(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(root == null){
            return list;
        }
        
        Stack<StatusNode> stack = new Stack<StatusNode>();
        stack.push(new StatusNode(root, true));
        stack.push(new StatusNode(root.right, false));
        stack.push(new StatusNode(root.left, false));
        
        while(!stack.isEmpty()){
            StatusNode node = stack.peek();
            if(node.internalNode == null){
                stack.pop();
                continue;
            }
            if(node.finished){
                list.add(stack.pop().internalNode.val);
                
            }else{
                stack.push(new StatusNode(node.internalNode.right, false));
                stack.push(new StatusNode(node.internalNode.left, false));
                node.finished = true;
            }
        }
        return list;
    }

}


class StatusNode{
    boolean finished;// if true, just output it, otherwise expand it
    TreeNode internalNode;
    
    public StatusNode(TreeNode node, boolean finished){
        this.internalNode = node;
        this.finished = finished;
    }
}

 

相关文章:

  • 2021-10-14
  • 2021-07-16
  • 2021-11-24
  • 2021-09-10
  • 2021-11-26
  • 2021-12-16
  • 2022-03-02
  • 2021-07-08
猜你喜欢
  • 2021-12-29
  • 2021-07-12
  • 2021-11-13
  • 2022-02-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案