Cod sursa(job #1046168)

Utilizator gxgpetPetculescu George gxgpet Data 2 decembrie 2013 18:41:11
Problema Hashuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 2.02 kb
#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;
}