Skip to content

Commit 759ed7a

Browse files
author
Gaurav Sonwani
committed
Level order traversal of a binary tree
1 parent 054ab88 commit 759ed7a

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

Tree/BinaryTreeLevelOrder.java

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package Tree;
2+
3+
import java.util.LinkedList;
4+
import java.util.Queue;
5+
6+
public class BinaryTreeLevelOrder {
7+
BinaryTreeNode root;
8+
9+
BinaryTreeLevelOrder() {
10+
}
11+
12+
BinaryTreeLevelOrder(int d) {
13+
root = new BinaryTreeNode(d);
14+
}
15+
/* Height of Tree
16+
*/
17+
int heightTree(BinaryTreeNode root) {
18+
if(root == null) return 0;
19+
int leftHeight = heightTree(root.left);
20+
int rightHeight = heightTree(root.right);
21+
if(leftHeight > rightHeight)
22+
return 1+leftHeight;
23+
else return 1+rightHeight;
24+
}
25+
26+
/* levelOrderUtil
27+
*/
28+
private void levelOrderUtil(BinaryTreeNode root, int level) {
29+
if(root == null) return;
30+
if(level == 1) System.out.print(root.data + " ");
31+
levelOrderUtil(root.left, level - 1);
32+
levelOrderUtil(root.right, level - 1);
33+
}
34+
35+
/* levelOrder traversal with recursion
36+
*/
37+
public void levelOrder(BinaryTreeNode root) {
38+
int heightOfTree = heightTree(root);
39+
for(int level = 1; level <= heightOfTree; level++)
40+
levelOrderUtil(root,level);
41+
}
42+
43+
/* levelOrder traversal level by level with recursion
44+
*/
45+
public void levelOrderLevelByLevel(BinaryTreeNode root) {
46+
47+
int heightOfTree = heightTree(root);
48+
for(int level = 1; level <= heightOfTree; level++)
49+
{
50+
levelOrderUtil(root, level);
51+
System.out.println();
52+
}
53+
}
54+
55+
/* Iterative levelOrder traversal using one queue
56+
*/
57+
public void levelOrderIterativeOneQueue(BinaryTreeNode root) {
58+
Queue<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
59+
queue.add(root);
60+
while (!queue.isEmpty())
61+
{
62+
BinaryTreeNode temp = queue.poll();
63+
System.out.print(temp.data + " ");
64+
if(temp.left != null) queue.add(temp.left);
65+
if(temp.right != null) queue.add(temp.right);
66+
}
67+
}
68+
69+
/* Iterative level-by-level levelOrder traversal util function using Two queue
70+
*/
71+
private void levelOrderIterativeLevelByLevelUtil(Queue<BinaryTreeNode> queue1, Queue<BinaryTreeNode> queue2) {
72+
while (!queue1.isEmpty()) {
73+
BinaryTreeNode temp = queue1.poll();
74+
System.out.print(temp.data + " ");
75+
if (temp.left != null) queue2.add(temp.left);
76+
if (temp.right != null) queue2.add(temp.right);
77+
}
78+
}
79+
80+
/* Iterative level-by-level levelOrder traversal using Two queue
81+
*/
82+
public void levelOrderIterativeLevelByLevelTwoQueue(BinaryTreeNode root) {
83+
Queue<BinaryTreeNode> queue1 = new LinkedList<BinaryTreeNode>();
84+
Queue<BinaryTreeNode> queue2 = new LinkedList<BinaryTreeNode>();
85+
queue1.add(root);
86+
while (!queue1.isEmpty() || !queue2.isEmpty()) {
87+
levelOrderIterativeLevelByLevelUtil(queue1,queue2);
88+
System.out.println();
89+
levelOrderIterativeLevelByLevelUtil(queue2,queue1);
90+
System.out.println();
91+
}
92+
}
93+
94+
/* Iterative level-by-level levelOrder traversal using Two queue
95+
*/
96+
public void levelOrderIterativeLevelByLevelUsingOneQueue(BinaryTreeNode root) {
97+
Queue<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
98+
queue.add(root);
99+
while (!queue.isEmpty()) {
100+
int levelNo = queue.size();
101+
while (levelNo > 0) {
102+
BinaryTreeNode temp = queue.poll();
103+
System.out.print(temp.data + " ");
104+
if (temp.left != null) queue.add(temp.left);
105+
if (temp.right != null) queue.add(temp.right);
106+
levelNo--;
107+
}
108+
System.out.println();
109+
}
110+
}
111+
}

0 commit comments

Comments
 (0)