Pagini recente » Cod sursa (job #461341) | Cod sursa (job #1785668) | Cod sursa (job #1125181) | Istoria paginii runda/simulare-cartita-10 | Cod sursa (job #1046168)
#include<fstream>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
struct arbore
{
int val;//, height;
arbore *dreapta;
arbore *stanga;
};
arbore *T;
void inserare(arbore *&c, long int k)
{
if(c)
if(c->val == k)
return;
else
if(c->val<k)
inserare(c->dreapta, k);
else
inserare(c->stanga, k);
else
{
c = new arbore;
c->val = k;
c->stanga = c->dreapta = 0;
}
}
int cautare(arbore *c, long int k)
{
if(c)
if(c->val == k)
return 1;
else
if(c->val < k)
cautare(c->dreapta, k);
else
cautare(c->stanga, k);
else
return 0;
}
void sterge_complicat(arbore* &c, arbore* &f)
{
arbore *aux;
if(f->dreapta)
sterge_complicat(c, f->dreapta);
else
{
c->val = f->val;
aux = f;
f = f->stanga;
delete aux;
}
}
void sterge(arbore *&T, long int k)
{
arbore *aux, *f;
if(T)
if(T->val == k)
if(T->stanga == 0 && T->dreapta == 0)
{
delete T;
T = 0;
}
else
if(T->stanga == 0)
{
aux = T->dreapta;
delete T;
T = aux;
}
else
if(T->dreapta == 0)
{
aux = T->stanga;
delete T;
T = aux;
}
else
{
sterge_complicat(T, T->stanga);
}
else
if(T->val < k)
sterge(T->dreapta, k);
else
sterge(T->stanga, k);
}
int main()
{
unsigned int n;
short op; long int x;
fin >> n;
for(unsigned int i=0; i<n; i++)
{
fin >> op >> x;
switch(op)
{
case 1:
inserare(T, x);
break;
case 2:
sterge(T, x);
break;
case 3:
fout << cautare(T, x) << "\n";
break;
}
}
return 0;
}