public class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); Stack<TreeNode> nodeStack = new Stack<TreeNode>(); TreeNode nowNode = root; boolean popNode = false; if (root == null) return result; while(!(nowNode == root && popNode)) { if ( !popNode && nowNode != null) { nodeStack.push(nowNode); nowNode = nowNode.left; } else if ( nowNode == null || (popNode && nowNode != nodeStack.peek().right)) { //left done if (nodeStack.peek().right == null) { nowNode = nodeStack.pop(); result.add(nowNode.val); popNode = true; } else { nowNode = nodeStack.peek().right; popNode = false; } } else if (popNode && (nowNode == nodeStack.peek().right)) { //right done nowNode = nodeStack.pop(); result.add(nowNode.val); popNode = true; } } return result; }}
[Leetcode] Binary Tree postorder Traversal