Home »
Data Structure
Level Order Traversal on a Binary Tree | Data Structure
In this article, we are going to learn Level order traversal on a binary tree: Inorder, Preorder and Postorder Traversal.
Submitted by Radib Kar, on September 29, 2018
For traversal on any binary tree, we mainly use three types of traversal. Those are:
- Inorder traversal
- Preorder Traversal
- Postorder Traversal
But there is another kind of traversal technique, quite similar to BFS of the graph, known as "Level order traversal".
The level order traversal means traversing left to right level-wise. Level order traversal of the following example turns to be: 2, 7, 5, 2, 6, 9, 5, 11, 4.
Image source: Wikipedia
The level order traversal is defined as follows:
- Visit the root
- While traversing level l, keep all elements at level l+1 in queue
- Go to next level and visit all the nodes at that level
- Repeat until all levels are completed
Additional data structure used: Queue
Pseudocode:
struct BT{ // tree node type
int data; //value
struct BT *left; //pointer to left child
struct BT *right; //pointer to right child
};
void levelorder (struct BT *root){ // root of the tree
struct BT *temp; // BT refers to node of tree (datatype for the node);
struct Queue *q=Creat_queue(); //creating a queue
if(!root) //root is null
return;
EnQueue(q,root); // Enqueue the root in the queue
while(!emptyQueue(q)){
temp=DeQueue(q); //Dequeue
print(temp->data); //print the data
if(temp->left)
EnQueue(q,temp->left); // if left child exists EnQueue
if(temp->right)
EnQueue(q,temp->right); // if right child exists EnQueue
}
DeleteQueue(q);
}
C++ implementation of level order traversal
#include <bits/stdc++.h>
using namespace std;
class tree{ // tree node is defined
public:
int data;
tree *left;
tree *right;
};
void levelorder( tree *root){
queue<tree*> q; // using stl
tree* temp;
q.push(root);
while(!q.empty()){
temp=q.front();
q.pop();
cout<<temp->data<<" "; //process node
if(temp->left)
q.push(temp->left); //EnQueue
if(temp->right)
q.push(temp->right); //EnQueue
}
}
tree* newnode(int data) // creating new node
{
tree* node = (tree*)malloc(sizeof(tree));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
int main()
{
//**same tree is builted as shown in example**
tree *root=newnode(2);
root->left= newnode(7);
root->right= newnode(5);
root->right->right=newnode(9);
root->right->right->left=newnode(4);
root->left->left=newnode(2);
root->left->right=newnode(6);
root->left->right->left=newnode(5);
root->left->right->right=newnode(11);
cout<<"Level Order traversal of binary tree is :"<<endl;
levelorder(root);
return 0;
}
Output
Level Order traversal of binary tree is :
2 7 5 2 6 9 5 11 4