File tree 2 files changed +194
-0
lines changed
2 files changed +194
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments