Skip to content

Commit 2b5ab49

Browse files
committed
Read Trees
1 parent 0cabd8f commit 2b5ab49

File tree

3 files changed

+164
-0
lines changed

3 files changed

+164
-0
lines changed

geekforgeeks/trees/a.out

35.3 KB
Binary file not shown.

geekforgeeks/trees/delete.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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+
}

geekforgeeks/trees/insert.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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+
}

0 commit comments

Comments
 (0)