forked from Abhishekaggarwal1998/DS-Lab-Codes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram11.cpp
156 lines (154 loc) · 2.44 KB
/
Program11.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* Q: Write a menu driven program that implements the following operations on a Binary search tree :
-> Insert a new element
-> Delete an existing element
-> Traversing the tree
- Pre-order Traversal
- In-order Traversal
- Post-order Traversal*/
#include<iostream>
using namespace std;
struct tree
{
int data;
tree *left;
tree *right;
};
tree *insert(tree *node,int data)
{
if(node==NULL)
{
tree *temp;
temp=new tree;
temp->data=data;
temp->left=temp->right=NULL;
return temp;
}
if(data<(node->data))
{
node->left=insert(node->left,data);
}
else if(data>(node->data))
{
node->right=insert(node->right,data);
}
return node;
}
tree *findmin(tree *node)
{
if(node==NULL)
{
return NULL;
}
if(node->left)
{
return findmin(node->left);
}
else
return node;
}
tree *delete1(tree *node,int data)
{
if(node==NULL)
{
cout<<"Tree is empty"<<endl;
}
else if(data<node->data)
{
node->left=delete1(node->left,data);
}
else if(data>node->data)
{
node->right=delete1(node->right,data);
}
else
{
tree *temp;
temp=new tree;
if(node->left==NULL)
{
temp=node->right;
delete node;
return temp;
}
else if(node->right==NULL)
{
temp=node->left;
delete node;
return temp;
}
temp=findmin(node->right);
node->data=temp->data;
node->right=delete1(node->right,temp->data);
}
return node;
}
void inorder(tree *node)
{
if(node==NULL)
{
return;
}
inorder(node->left);
cout<<node->data<<" ";
inorder(node->right);
}
void preorder(tree *node)
{
if(node==NULL)
{
return;
}
cout<<node->data<<" ";
preorder(node->left);
preorder(node->right);
}
void postorder(tree *node)
{
if(node==NULL)
{
return;
}
postorder(node->left);
postorder(node->right);
cout<<node->data<<" ";
}
int main()
{
int value;
struct tree *node=NULL;
cout<<"1. Insert\n2. Delete\n3. Display in Preorder\n4. Display in Inorder\n5. Display in Postorder\n6. Exit\n";
while(1)
{
int ch;
cout<<"enter the choice : ";
cin>>ch;
switch(ch)
{
case 1:
cout<<"enter the value : ";
cin>>value;
node=insert(node,value);
break;
case 2:
cout<<"enter the value : ";
cin>>value;
node=delete1(node,value);
break;
case 3:
preorder(node);
cout<<endl;
break;
case 4:
inorder(node);
cout<<endl;
break;
case 5:
postorder(node);
cout<<endl;
break;
case 6:
exit(0);
}
}
return 0;
}