Pagini recente » Cod sursa (job #1200444) | Cod sursa (job #1120295) | Cod sursa (job #2953691) | Cod sursa (job #1218139)
#include<fstream>
using namespace std;
struct cell
{
int val;
cell *legst,*legdr;
cell()
{
legst=legdr=NULL;
}
};
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
int n,nr;
cell *root,*p,*q,*tata;
inline void ADAUGA(cell *c,int x)
{
if (x<c->val)
{
if (c->legst==NULL)
{
p=new cell;
c->legst=p;
p->val=x;
nr++;
}
else ADAUGA(c->legst,x);
}
if (x>c->val)
{
if (c->legdr==NULL)
{
p=new cell;
c->legdr=p;
p->val=x;
nr++;
}
else ADAUGA(c->legdr,x);
}
}
inline void STERGE(cell *c,int x,int nr)
{
if (x==c->val)
{
cell *t,*tatat;
p=c->legst;
q=c->legdr;
if (!q && !p)
{
if (tata->legdr==c) tata->legdr=NULL;
if (tata->legst==c) tata->legst=NULL;
}
if (c->legdr!=NULL)
{
tatat=c;
t=c->legdr;
while (t->legst!=NULL) {tatat=t;t=t->legst;}
if (tata->legst->val==x) tata->legst=t;
if (tata->legdr->val==x) tata->legdr=t;
if (tatat->legdr==t) tatat->legdr=NULL;
if (tatat->legst==t) tatat->legst=NULL;
t->legst=p;
t->legdr=q;
}
nr--;
}
if (x<c->val && c->legst!=NULL) {tata=c;STERGE(c->legst,x,nr+1);}
if (x>c->val && c->legdr!=NULL) {tata=c;STERGE(c->legdr,x,nr+1);}
}
inline bool FIND(cell *c,int x)
{
if (x==c->val) return 1;
if (x<c->val && c->legst!=NULL) return FIND(c->legst,x);
if (x>c->val && c->legdr!=NULL) return FIND(c->legdr,x);
return 0;
}
int main()
{
int ok,x;
fin>>n;
while (n--)
{
fin>>ok>>x;
//fout<<ok<<" "<<x<<"\n";
if (ok==1)
{
if (nr==0)
{nr++;root=new cell;root->val=x;}
else ADAUGA(root,x);
}
if (ok==2 && nr) STERGE(root,x,0);
if (ok==3 && nr) fout<<FIND(root,x)<<"\n";
}
return 0;
}