package com.interview.books.leetcodeoj; import com.interview.leetcode.utils.TreeNode; import java.util.*; /** * Created_By: stefanie * Date: 14-12-28 * Time: 下午1:37 */ public class LOJ145_BinaryTreePostorderTraversal { //use Stack and HashSet(tracking if child of one node is already put in stack). //stack.peek() one node, if(!childrenVisited.contains(node)) // put node.right and node.left in stack, // and put node in childrenVisited // else visit this node. public List<Integer> postorderTraversal(TreeNode root) { List<Integer> nodes = new ArrayList(); Stack<TreeNode> stack = new Stack(); Set<TreeNode> childrenVisited = new HashSet(); if(root != null) stack.push(root); while(!stack.isEmpty()){ TreeNode node = stack.peek(); if(!childrenVisited.contains(node)){ if(node.right != null) stack.add(node.right); if(node.left != null) stack.add(node.left); childrenVisited.add(node); } else { nodes.add(node.val); stack.pop(); } } return nodes; } }