1
+ /* *
2
+ * \file
3
+ * \brief A simple tree implementation using nodes
4
+ *
5
+ * \todo update code to use C++ STL library features and OO structure
6
+ * \warning This program is a poor implementation and does not utilize any of
7
+ * the C++ STL features.
8
+ */
9
+ #include < algorithm>
1
10
#include < iostream>
2
11
#include < queue>
3
12
4
- using namespace std ;
5
-
6
13
typedef struct node {
7
14
int data;
8
15
int height;
9
16
struct node *left;
10
17
struct node *right;
11
18
} node;
12
19
13
- int max (int a, int b) { return a > b ? a : b; }
14
-
15
- // Returns a new Node
16
-
20
+ /* * Create and return a new Node */
17
21
node *createNode (int data) {
18
22
node *nn = new node ();
19
23
nn->data = data;
@@ -23,20 +27,17 @@ node *createNode(int data) {
23
27
return nn;
24
28
}
25
29
26
- // Returns height of tree
27
-
30
+ /* * Returns height of tree */
28
31
int height (node *root) {
29
32
if (root == NULL )
30
33
return 0 ;
31
- return 1 + max (height (root->left ), height (root->right ));
34
+ return 1 + std:: max (height (root->left ), height (root->right ));
32
35
}
33
36
34
- // Returns difference between height of left and right subtree
35
-
37
+ /* * Returns difference between height of left and right subtree */
36
38
int getBalance (node *root) { return height (root->left ) - height (root->right ); }
37
39
38
- // Returns Node after Right Rotation
39
-
40
+ /* * Returns Node after Right Rotation */
40
41
node *rightRotate (node *root) {
41
42
node *t = root->left ;
42
43
node *u = t->right ;
@@ -45,8 +46,7 @@ node *rightRotate(node *root) {
45
46
return t;
46
47
}
47
48
48
- // Returns Node after Left Rotation
49
-
49
+ /* * Returns Node after Left Rotation */
50
50
node *leftRotate (node *root) {
51
51
node *t = root->right ;
52
52
node *u = t->left ;
@@ -55,16 +55,14 @@ node *leftRotate(node *root) {
55
55
return t;
56
56
}
57
57
58
- // Returns node with minimum value in the tree
59
-
58
+ /* * Returns node with minimum value in the tree */
60
59
node *minValue (node *root) {
61
60
if (root->left == NULL )
62
61
return root;
63
62
return minValue (root->left );
64
63
}
65
64
66
- // Balanced Insertion
67
-
65
+ /* * Balanced Insertion */
68
66
node *insert (node *root, int item) {
69
67
node *nn = createNode (item);
70
68
if (root == NULL )
@@ -86,8 +84,7 @@ node *insert(node *root, int item) {
86
84
return root;
87
85
}
88
86
89
- // Balanced Deletion
90
-
87
+ /* * Balanced Deletion */
91
88
node *deleteNode (node *root, int key) {
92
89
if (root == NULL )
93
90
return root;
@@ -118,14 +115,13 @@ node *deleteNode(node *root, int key) {
118
115
return root;
119
116
}
120
117
121
- // LevelOrder (Breadth First Search)
122
-
118
+ /* * LevelOrder (Breadth First Search) */
123
119
void levelOrder (node *root) {
124
- queue<node *> q;
120
+ std:: queue<node *> q;
125
121
q.push (root);
126
122
while (!q.empty ()) {
127
123
root = q.front ();
128
- cout << root->data << " " ;
124
+ std:: cout << root->data << " " ;
129
125
q.pop ();
130
126
if (root->left )
131
127
q.push (root->left );
@@ -134,18 +130,19 @@ void levelOrder(node *root) {
134
130
}
135
131
}
136
132
133
+ /* * Main function */
137
134
int main () {
138
135
// Testing AVL Tree
139
136
node *root = NULL ;
140
137
int i;
141
138
for (i = 1 ; i <= 7 ; i++) root = insert (root, i);
142
- cout << " LevelOrder: " ;
139
+ std:: cout << " LevelOrder: " ;
143
140
levelOrder (root);
144
141
root = deleteNode (root, 1 ); // Deleting key with value 1
145
- cout << " \n LevelOrder: " ;
142
+ std:: cout << " \n LevelOrder: " ;
146
143
levelOrder (root);
147
144
root = deleteNode (root, 4 ); // Deletin key with value 4
148
- cout << " \n LevelOrder: " ;
145
+ std:: cout << " \n LevelOrder: " ;
149
146
levelOrder (root);
150
147
return 0 ;
151
148
}
0 commit comments