private List<Integer> postorderInterative1(TreeNode root) {
			List<Integer> result = new ArrayList<Integer>();
			Stack<TreeNode> stack = new Stack<TreeNode>();

			TreeNode pre = null;
			TreeNode cur = null;

			if (root == null)
				return result;

			stack.push(root);
			while (!stack.isEmpty()) {
				cur = stack.peek();
				if (cur.left == null && cur.right == null) {
					// The node has no children can can be visited directly
					result.add(cur.val);
					stack.pop();
				} else if (pre == cur.left || pre == cur.right) {
					// The node's children have already been visited
					result.add(cur.val);
					stack.pop();
				} else {
					// put right node in stack first, so left node will be
					// visited before right
					if (cur.right != null) {
						stack.push(cur.right);
					}

					if (cur.left != null) {
						stack.push(cur.left);
					}
				}

				pre = cur;
			}

			return result;
		}