public static <E> void traversalWithLineZigZag(BalancedTreeNode<E> root) {
		if(root == null) {
			return;
		}
		int currentLineNodeCount = 1;
		int nextLineNodeCount = 0;
		int lineNo = 0;
		Stack<BalancedTreeNode<E>> stackEven = new Stack<BalancedTreeNode<E>>();
		Stack<BalancedTreeNode<E>> stackOdd = new Stack<BalancedTreeNode<E>>();
		stackEven.push(root);
		
		while(!stackEven.isEmpty() || !stackOdd.isEmpty()) {
			if(lineNo%2 == 0) {
				BalancedTreeNode<E> node = stackEven.pop();
				System.out.print(node.value + " ");
				if(node.left != null) {
					stackOdd.push(node.left);
					nextLineNodeCount++;
				}
				if(node.right != null) {
					stackOdd.push(node.right);
					nextLineNodeCount++;
				}
			} else {
				BalancedTreeNode<E> node = stackOdd.pop();
				System.out.print(node.value + " ");
				if(node.right != null) {
					stackEven.push(node.right);
					nextLineNodeCount++;
				}
				if(node.left != null) {
					stackEven.push(node.left);
					nextLineNodeCount++;
				}
			}

			currentLineNodeCount--;
			if(currentLineNodeCount==0) {
				System.out.println();
				currentLineNodeCount = nextLineNodeCount;
				nextLineNodeCount = 0;
				lineNo++;
			}
		}
	}