BT - print alternating left and right

import java.util.LinkedList;
import java.util.Queue;


class Main {

// order from top to bottom
public static void printNodes(TreeBNode root)
{
// return is tree is empty
if (root == null) {
return;
}

// print root node
System.out.print(root.key + " ");

// create an two empty queues and enqueue root's left and
// right child respectively
Queue Q1 = new LinkedList<>(), Q2 = new LinkedList<>();
Q1.add(root.left);
Q2.add(root.right);

// run till queue is not empty
while (!Q1.isEmpty())
{
// calculate number of nodes in current level
int n = Q1.size();

// process every node of current level
while (n-- > 0)
{
// pop front node from first queue and print it
TreeBNode x = Q1.poll();

System.out.print(x.key + " ");

// push left and right child of x to first queue
if (x.left != null) {
Q1.add(x.left);
}

if (x.right != null) {
Q1.add(x.right);
}

// pop front node from second queue and print it
TreeBNode y = Q2.poll();

System.out.print(y.key + " ");

// push right and left child of y to second queue
if (y.right != null) {
Q2.add(y.right);
}

if (y.left != null) {
Q2.add(y.left);
}
}
}
}

// main function
public static void main(String[] args)
{
TreeBNode root = new TreeBNode (1);
root.left = new TreeBNode (2);
root.right = new TreeBNode (3);
root.left.left = new TreeBNode (4);
root.left.right = new TreeBNode (5);
root.right.left = new TreeBNode (6);
root.right.right = new TreeBNode (7);
root.left.left.left = new TreeBNode (8);
root.left.left.right = new TreeBNode (9);
root.left.right.left = new TreeBNode (10);
root.left.right.right = new TreeBNode (11);
root.right.left.left = new TreeBNode (12);
root.right.left.right = new TreeBNode (13);
root.right.right.left = new TreeBNode (14);
root.right.right.right = new TreeBNode (15);

printNodes(root);
}
}

Comments