public ArrayList<Integer> postorderTraversal(TreeNode root) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		Stack<TreeNode> nodes = new Stack<TreeNode>();
		Stack<Boolean> expands = new Stack<Boolean>();
		if(root != null) {
			nodes.add(root);
			expands.add(false);
		}
		while(!nodes.isEmpty()) {
			boolean expand = expands.pop();
			TreeNode node = nodes.pop();
			if(expand) {
				list.add(node.val);
			} else {
				nodes.add(node);
				expands.add(true);
				if(node.right != null) {
					nodes.add(node.right);
					expands.add(false);
				}
				if(node.left != null) {
					nodes.add(node.left);
					expands.add(false);
				}
			}
		}
		return list;
	}