-
Notifications
You must be signed in to change notification settings - Fork 0
/
gg.cpp
189 lines (108 loc) · 2.04 KB
/
gg.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
#include<iostream>
using namespace std;
class node{
public:
int val;
node*parent;
node*left;
node*right;
node(int value){val=value;
parent=NULL;
right=NULL;
left=NULL;
}
};
class bst{
public:
node*root;
bst(){root=NULL;}
void insert(int value){
i(root,value);}
void i(node*curr,int value){
node*temp=new node(value);
if(root==NULL){
temp->val=value;
root=temp;}
else if(temp->val>value)
{if(curr->left!=NULL)
{curr->left=temp;
temp->parent=curr;}
else{i(curr->left,value);}
}
else{if(curr->right!=NULL){
curr->right=temp;
temp->parent=curr;}
else{i(curr->right,value);}
}
}
void di(node*curr)
{if(curr!=NULL)
{di(curr->left);
cout<<curr->val<<",";
di(curr->right);
}
}
void display(){
di(root);
}
void search(int value){
s(root,value);}
node* s(node*curr,int value)
{if(curr==NULL){cout<<"not found";
return curr;}
else if(curr->val==value){cout<<"found";
return curr;}
else if(curr->val>value)
{s(curr->left,value);}
else{s(curr->right,value);}
}
node* findmax(node*curr)
{if(curr->right!=NULL)
{findmax(curr->right);}
return curr;
}
void replaceinparent(node*curr,node*child)
{if(curr->parent){
if(curr->parent->left=curr)
{curr->parent->left=child;}
else{curr->parent->right=child;}
}
if(child){child->parent=curr->parent;}
}
void d(node*current,int value,node*curr1){
if(current==NULL){return;}
node*curr=s(current,value);
if(curr==NULL){return;}
else{
if((curr->left!=NULL)&&(curr->right!=NULL))
{node*temp=findmax(curr->left);
curr->val=temp->val;
d(temp,temp->val,temp);
}
else if((curr->left!=NULL)||(curr->right!=NULL))
{if(curr->left!=NULL){replaceinparent(curr,curr->left);}
else{replaceinparent(curr,curr->right);}
}
else{replaceinparent(curr,NULL);}
}
}
void delet(int value)
{d(root,value,root);}
int count(node*curr){
curr=root;
return 1+ count(curr->left)+ count(curr->right);
}
int max(int a,int b){
if(a>b){return a;}
else return b;}
int height(node*curr){
curr=root;
return 1+max(height(curr->right),height(curr->left));
}
};
int main(){
bst b;
b.insert(34);
b.display();
return 2;
}