Skip to content

Commit a80c9ca

Browse files
committed
Day-14-BST level order tree traversal(Iterative + recursive)
1 parent 4a555c3 commit a80c9ca

File tree

2 files changed

+194
-0
lines changed

2 files changed

+194
-0
lines changed

Diff for: tree_problems/levelOrderTraversalIterative.cpp

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* Program to implement level order traversal - iterative version
3+
*/
4+
#include <iostream>
5+
#include <queue.h>
6+
7+
8+
const int maxNodes = 15;
9+
10+
struct Node
11+
{
12+
int data;
13+
Node* left;
14+
Node* right;
15+
};
16+
17+
/*
18+
* An helper function to get a new node
19+
*/
20+
21+
Node* newNode( int data )
22+
{
23+
Node *temp = new Node;
24+
temp->data = data;
25+
temp->left = temp->right = nullptr;
26+
return temp;
27+
}
28+
29+
/*
30+
* function to insert a new node.
31+
* Arg : root Node, new data
32+
*/
33+
34+
void insert( Node* & node, int data)
35+
{
36+
if ( node == nullptr)
37+
{
38+
node = newNode(data);
39+
}
40+
else
41+
{
42+
if (data < node->data)
43+
{
44+
insert( node->left, data);
45+
}
46+
else
47+
{
48+
insert( node->right, data);
49+
}
50+
}
51+
}
52+
53+
/*
54+
* Level order traversal
55+
*/
56+
void levelOrder( Node * node )
57+
{
58+
std::cout << "Printing level order traversal of the tree:\n";
59+
if ( node == nullptr )
60+
{
61+
std::cout << "Empty tree\n";
62+
return ;
63+
}
64+
65+
algo::Queue<Node*> Q(maxNodes);
66+
Q.push(node);
67+
while ( !Q.empty() )
68+
{
69+
Node *currNode = Q.front();
70+
std::cout << currNode->data << " ";
71+
Q.pop();
72+
if (currNode->left != nullptr)
73+
{
74+
Q.push(currNode->left);
75+
}
76+
if (currNode->right != nullptr)
77+
{
78+
Q.push(currNode->right);
79+
}
80+
}
81+
std::cout << std::endl;
82+
}
83+
84+
85+
int main()
86+
{
87+
Node * root;
88+
insert(root, 4);
89+
insert(root, 2);
90+
insert(root, 6);
91+
insert(root, 1);
92+
insert(root, 3);
93+
insert(root, 5);
94+
insert(root, 7);
95+
levelOrder(root);
96+
return 0;
97+
98+
}

Diff for: tree_problems/levelOrderTraversalRecursive.cpp

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Level order BST traveral iterative
3+
*/
4+
#include <iostream>
5+
6+
struct Node
7+
{
8+
int data;
9+
Node *left;
10+
Node *right;
11+
};
12+
13+
Node* newNode( int data )
14+
{
15+
Node *temp = new Node;
16+
temp->data = data;
17+
temp->left = temp->right = nullptr;
18+
return temp;
19+
}
20+
21+
void insert( Node* & node, int data)
22+
{
23+
if ( node == nullptr)
24+
{
25+
node = newNode(data);
26+
}
27+
else
28+
{
29+
if ( data < node->data )
30+
{
31+
insert(node->left, data);
32+
}
33+
else
34+
{
35+
insert(node->right, data);
36+
}
37+
}
38+
}
39+
40+
int height( const Node * node)
41+
{
42+
if ( node == nullptr )
43+
{
44+
return 0;
45+
}
46+
else
47+
{
48+
int leftHeight = height(node->left);
49+
int rightHeight = height(node->right);
50+
return ( 1 + ((leftHeight > rightHeight) ? leftHeight : rightHeight));
51+
}
52+
}
53+
54+
void printLevel(Node *node, int level)
55+
{
56+
if (node == nullptr)
57+
{
58+
return;
59+
}
60+
if ( level == 1 )
61+
{
62+
std::cout << node->data <<" ";
63+
}
64+
else
65+
{
66+
printLevel( node->left, level - 1);
67+
printLevel( node->right, level - 1);
68+
}
69+
70+
}
71+
72+
73+
void levelOrder( Node * node )
74+
{
75+
std::cout << "Level order traversal of the tree:\n";
76+
int h = height(node);
77+
for ( int i = 1; i <= h; ++i ) {
78+
printLevel(node, i );
79+
std::cout << std::endl;
80+
}
81+
}
82+
83+
int main()
84+
{
85+
Node * root;
86+
insert(root, 4);
87+
insert(root, 2);
88+
insert(root, 6);
89+
insert(root, 1);
90+
insert(root, 3);
91+
insert(root, 5);
92+
insert(root, 7);
93+
levelOrder(root);
94+
return 0;
95+
}
96+

0 commit comments

Comments
 (0)