public void iterativeInOrder(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 {
				System.out.println(currentNode.getData());

				while (currentNode.getRight() == null && !stack.isEmpty()) {
					currentNode = stack.pop();
					System.out.println(currentNode.getData());
				}
				currentNode = currentNode.getRight();
			}
		}

		/*
		 * alternate solution //the criteria to decide when we stop the loop is
		 * when current points to null and no nodes in stack
		  while(currentNode!=null || !stack.isEmpty()) { 
		  //firstly if  currentNode is not null, we push currentNode to stack and shift focus to its left sub-tree 
		  if(currentNode!=null) { stack.push(currentNode);
		  currentNode = currentNode.getLeft(); } 
		  else//we need pop out nodes from the stack and at that time we shift focus to its right sub-tree
		 { currentNode = stack.pop();
		  System.out.print(currentNode.getData()+", ");//print out as visiting it 
		  currentNode = currentNode.getRight(); } 
		  }
		 */

	}