Pagini recente » Cod sursa (job #79095) | Cod sursa (job #2278126) | Cod sursa (job #1823029) | Cod sursa (job #2194174) | Cod sursa (job #1990898)
#include <fstream>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
struct tree {
int value;
tree *left, *right;
};
tree *t;
void insertTree(int k) {
tree *p = t;
tree *q = t -> left;
while(q != 0) {
p = q;
if (q -> value > k)
q = q -> left;
else
q = q -> right;
}
tree *r = new tree;
r -> left = 0;
r -> right = 0;
r -> value = k;
if (p == t || p -> value > k) {
p -> left = r;
}
else
p -> right = r;
}
void deleteTree(int k) {
tree *p = t;
tree *q = t -> left;
tree *r,*s;
while (q != 0 && q -> value != k) {
p = q;
if (q -> value > k)
q = q -> left;
else
q = q -> right;
}
if (q != 0) {
if (q -> left == 0) {
s = q -> left;
}
else {
r = q;
s = r -> left;
while(s -> right) {
r = s;
s = s -> right;
}
r -> right = 0;
s -> left = q -> left;
s -> right = q -> right;
}
if (p -> left == q)
p -> left = s;
else
p -> right = s;
delete (q);
}
}
int inTree(int k) {
tree *q = t -> left;
while (q != 0 && q -> value != k) {
if (q -> value > k)
q = q -> left;
else
q = q -> right;
}
if(q)
return 1;
return 0;
}
int main(){
t = new tree;
t -> left = 0;
t -> right = 0;
int op, i, n;
fin >> n;
for(int k = 0; k < n; k ++){
fin >> op >> i;
if (op == 1)
insertTree(i);
else
if (op == 2)
deleteTree(i);
else
fout << inTree(i) <<"\n";
}
return 0;
}