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;
}