Print level order traversal of Binary Tree
Solution)
There are three approaches.
- Iterative
- Using two queues
- Using one queue with one special null for line break
- Recursive
Iterative approach
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int v) {
val = v;
left = right = null;
}
}
public void printLevelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
queue.add(null);
while(queue.size() != 1) {
TreeNode node;
while((node = queue.remove()) != null) {
System.out.print(node.val);
if (node.left != null) queue.add(node.left);
if (node.right != null) queue.add(node.right);
}
System.out.println();
queue.add(null);
}
}
Recursive approach
public void helper(Queue<TreeNode> queue) {
if (queue.isEmpty()) return;
Queue<TreeNode> cQueue = new LinkedList<>();
while(!queue.isEmpty()) {
TreeNode node = queue.remove();
System.out.print(node.val);
if (node.left != null) cQueue.add(node.left);
if (node.right != null) cQueue.add(node.right);
}
System.out.println();
helper(cQueue);
}
public void printLevelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList();
queue.add(root);
helper(queue);
}