File tree Expand file tree Collapse file tree 3 files changed +164
-0
lines changed Expand file tree Collapse file tree 3 files changed +164
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+
4
+ struct Node
5
+ {
6
+ int data;
7
+ struct Node *right,*left;
8
+ };
9
+
10
+ Node* newNode (int data){
11
+ Node* temp=new Node;
12
+ temp->data =data;
13
+ temp->right =NULL ;
14
+ temp->left =NULL ;
15
+ return temp;
16
+ }
17
+
18
+ void inorder (Node* temp){
19
+ if (!temp)
20
+ return ;
21
+ inorder (temp->left );
22
+ cout<<temp->data <<" " ;
23
+ inorder (temp->right );
24
+ }
25
+
26
+ void deep_deletion (Node *root,Node *d_node)
27
+ {
28
+ queue<Node*> q;
29
+ q.push (root);
30
+ while (!q.empty ()){
31
+ Node* temp = q.front ();
32
+ q.pop ();
33
+
34
+ if (temp->right ){
35
+ if (temp->right == d_node){
36
+ temp->right = NULL ;
37
+ delete (d_node);
38
+ return ;
39
+ }
40
+ else
41
+ q.push (temp->right );
42
+ }
43
+
44
+ if (temp->left ){
45
+ if (temp->left == d_node){
46
+ temp->left =NULL ;
47
+ delete (d_node);
48
+ return ;
49
+ }
50
+ else
51
+ q.push (temp->left );
52
+ }
53
+ }
54
+ }
55
+ void deletion (Node* root, int data){
56
+ queue<Node*>q;
57
+ q.push (root);
58
+ Node *temp;
59
+ Node* key_Node= NULL ;
60
+ while (!q.empty ()){
61
+ temp=q.front ();
62
+ q.pop ();
63
+
64
+ if (temp->data ==data)
65
+ key_Node=temp;
66
+ if (temp->left )
67
+ q.push (temp->left );
68
+ if (temp->right )
69
+ q.push (temp->right );
70
+ }
71
+ int x=temp->data ; // Right most last element
72
+ key_Node->data =x;
73
+ deep_deletion (root,temp);
74
+ // delete(temp); Cant.. As we have to make thee previous as Null. then we can delete this node.
75
+ }
76
+
77
+
78
+
79
+ int main ()
80
+ {
81
+ struct Node * root = newNode (10 );
82
+ root->left = newNode (11 );
83
+ root->left ->left = newNode (7 );
84
+ root->left ->right = newNode (12 );
85
+ root->right = newNode (9 );
86
+ root->right ->left = newNode (15 );
87
+ root->right ->right = newNode (8 );
88
+
89
+ cout << " Inorder traversal before deletion : " ;
90
+ inorder (root);
91
+
92
+ int key = 11 ;
93
+ deletion (root, key);
94
+
95
+ cout << endl;
96
+ cout << " Inorder traversal after deletion : " ;
97
+ inorder (root);
98
+
99
+ return 0 ;
100
+ }
Original file line number Diff line number Diff line change
1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+
4
+ struct Node
5
+ {
6
+ int data;
7
+ struct Node *right,*left;
8
+ };
9
+
10
+ Node* newNode (int data){
11
+ Node* temp=new Node;
12
+ temp->data =data;
13
+ temp->right =NULL ;
14
+ temp->left =NULL ;
15
+ return temp;
16
+ }
17
+
18
+ void inorder (Node* temp){
19
+ if (!temp)
20
+ return ;
21
+ inorder (temp->left );
22
+ cout<<temp->data <<" " ;
23
+ inorder (temp->right );
24
+ }
25
+
26
+ void insert (Node* temp,int data){
27
+ queue<Node*>q;
28
+ q.push (temp);
29
+ while (!q.empty ()){
30
+ Node* temp=q.front ();
31
+ q.pop ();
32
+
33
+ if (!temp->left )
34
+ {temp->left = newNode (data);break ;}
35
+ else
36
+ {q.push (temp->left );}
37
+ if (!temp->right )
38
+ {temp->right = newNode (data);break ;}
39
+ else
40
+ {q.push (temp->right );}
41
+ }
42
+ }
43
+
44
+ int main ()
45
+ {
46
+ struct Node * root = newNode (10 );
47
+ root->left = newNode (11 );
48
+ root->left ->left = newNode (7 );
49
+ root->right = newNode (9 );
50
+ root->right ->left = newNode (15 );
51
+ root->right ->right = newNode (8 );
52
+
53
+ cout << " Inorder traversal before insertion:" ;
54
+ inorder (root);
55
+
56
+ int key = 12 ;
57
+ insert (root, key);
58
+
59
+ cout << endl;
60
+ cout << " Inorder traversal after insertion:" ;
61
+ inorder (root);
62
+
63
+ return 0 ;
64
+ }
You can’t perform that action at this time.
0 commit comments