public void iterativePostOrder(TreeNode root) {
		if (root == null) {
			return;
		}

		Stack<TreeNode> stack = new Stack<TreeNode>();
		TreeNode currentNode = root;

		while (currentNode != null) {

			if (currentNode.getLeft() != null) {
				stack.push(currentNode);
				currentNode = currentNode.getLeft();
			} else if (currentNode.getRight() != null) {
				stack.push(currentNode);
				currentNode = currentNode.getRight();
			} else {
				System.out.println(currentNode.getData());

				// iterate while either right != current node or right is not
				// null, and stack should not be empty
				while (!stack.isEmpty()
						&& (stack.peek().getRight() == currentNode || stack
								.peek().getRight() == null)) {
					currentNode = stack.pop();
					System.out.println(currentNode.getData());
				}

				if (!stack.isEmpty()) {
					currentNode = stack.peek().getRight();
				} else {
					break;
				}

			}
		}
	}