@@ -4,25 +4,25 @@ using namespace std;
4
4
struct Node
5
5
{
6
6
int data;
7
- Node *left ;
7
+ Node *left;
8
8
Node *right;
9
9
};
10
10
11
- Node * newNode (int data)
11
+ Node *newNode (int data)
12
12
{
13
- Node * new_node = new Node ;
14
- new_node->data = data ;
15
- new_node->left = NULL ;
16
- new_node->right = NULL ;
17
- return new_node ;
13
+ Node *new_node = new Node;
14
+ new_node->data = data;
15
+ new_node->left = NULL ;
16
+ new_node->right = NULL ;
17
+ return new_node;
18
18
}
19
19
20
20
Node *create_BST (int arr[], int n, int i)
21
21
{
22
22
Node *root = nullptr ;
23
23
24
24
if (i < n)
25
- {
25
+ {
26
26
root = newNode (arr[i]);
27
27
root->left = create_BST (arr, n, 2 * i + 1 );
28
28
root->right = create_BST (arr, n, 2 * i + 2 );
@@ -32,43 +32,64 @@ Node *create_BST(int arr[], int n, int i)
32
32
33
33
void inorder_traversal (Node *root)
34
34
{
35
- if (root != NULL )
35
+ if (root != NULL )
36
36
{
37
37
inorder_traversal (root->left );
38
- cout<< root->data << " " ;
38
+ cout << root->data << " " ;
39
39
inorder_traversal (root->right );
40
40
}
41
41
}
42
42
43
- // insert element in BST
44
- Node * insert_BST (Node * root , int e)
45
- {
43
+ // insert element in BST
44
+ Node *insert_BST_recursion (Node *root, int e)
45
+ {
46
46
47
- if (!root)
47
+ if (!root)
48
48
{
49
- Node * node = new Node ;
49
+ Node *node = new Node;
50
50
node = newNode (e);
51
- return node ;
51
+ return node;
52
+ }
53
+ if (root->data > e)
54
+ root->left = insert_BST (root->left , e);
55
+
56
+ else if (root->data < e)
57
+ root->right = insert_BST (root->right , e);
58
+
59
+ return root;
60
+ }
61
+
62
+ void insert_BST_iteration (Node *root, int e)
63
+ {
64
+ Node *prev = nullptr ;
65
+ while (root != nullptr )
66
+ {
67
+ prev = root;
68
+ if ( root->data == e)
69
+ return ;
70
+ if (root->data > e)
71
+ root = root->left ;
72
+
73
+ else if (root->data < e)
74
+ root = root->right ;
52
75
}
53
- if (root->data > e)
54
- {
55
- root->left = insert_BST (root->left , e );
56
- }
57
- else if (root->data < e)
58
- {
59
- root->right = insert_BST (root->right , e);
60
- }
61
- return root ;
76
+
77
+ Node * node = newNode (e) ;
78
+ if (prev->data > e)
79
+ prev->left = node ;
80
+ else
81
+ prev->right = node ;
62
82
}
63
83
64
84
int main ()
65
85
{
66
86
int arr[] = {30 , 20 , 40 , 10 , 25 , 35 , 50 };
67
87
int n = sizeof (arr) / sizeof (arr[0 ]);
68
- Node * root = create_BST (arr, n , 0 );
88
+ Node *root = create_BST (arr, n, 0 );
69
89
inorder_traversal (root);
70
- root = insert_BST (root , 45 );
71
- cout<<endl;
90
+ // root = insert_BST_recursion(root, 45);
91
+ insert_BST_iteration (root , 45 ) ;
92
+ cout << endl;
72
93
inorder_traversal (root);
73
94
return 0 ;
74
95
}
0 commit comments