Cod sursa(job #1218363)

Utilizator vasica38Vasile Catana vasica38 Data 10 august 2014 18:23:37
Problema Hashuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 2.04 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

typedef struct lista
            {
                int nr;
                lista * s;
                lista * d;
            } *arb;
arb v,man;
int k,i,j,n;

int creare(arb &c , int k)
{
    if (c!=NULL)
        {
            if (c->nr==k) return 1;
                else
                if (c->nr<k) creare(c->d,k);
                 else
                    if (c->nr>k) creare(c->s,k);
        }
        else
        {
          c=new lista;
          c->s=NULL;
          c->d=NULL;
          c->nr=k;
        }


}

bool cautare(arb &c, int k)

{
    if (c!=NULL)
        {
            if (c->nr==k) return 1;
                else
                if (c->nr<k) cautare(c->d,k);
                 else
                    if (c->nr>k) cautare(c->s,k);
        }
        else return 0;
}



void cmmd(arb &c, arb &f)
{
    if (f->d!=NULL)
    {
        cmmd(c,f->d);
    }
    else
    {
        c->nr=f->nr;
        man=f;
        f=f->s;
        delete man;
    }

}


void sterg(arb &c , int k)

{
    arb f;
    if (c!=NULL)
    {
        if (c->nr==k)
    {
        if ((c->s==NULL)&(c->d==NULL))
        {
            delete c;
            c=NULL;
        }
        else
        if (c->s==NULL)
        {
            f=c->d;
            delete c;
            c=f;
        }
        else
        if (c->d==NULL)
        {
            f=c->s;
            delete c;
            c=f;
        }
        else cmmd(c,c->s);
    }
    else
        if (c->nr<k) sterg(c->d,k);
                else sterg(c->s,k);
    }
}




int main()
{


freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%d\n",&n);

int op;
for (i=1 ; i<=n; ++i)
{
    scanf("%d%d",&op,&k);
    if (op==1)
    {
        creare(v,k);
    }
    if (op==2)
    {
        sterg(v,k);
    }
    if (op==3)
    {
        if (cautare(v,k)==1) printf("%d\n",1);
            else printf("%d\n",0);
    }
}
return 0;
}