Você está na página 1de 4

Problema P5 Prelucrare arbori binari de cautare. Se utilizeaza fisierul arbore.

txt
#include <iostream> #include<fstream> using namespace std; struct Nod { int nr,info; Nod *as,*ad; }; Nod *v,*man; char opt; int i,k,n,St[50],Dr[50]; void Inserare(Nod *&c, int k) { if (c) if(c->nr==k) cout<<"Numar deja iserat!"<<endl; else if(c->nr<k) Inserare(c->ad,k); else Inserare(c->as,k); else { c=new Nod; c->as=c->ad=0; c->nr=k; } } void Cautare(Nod *&c, Nod *&adr,int k) { if(c) if(c->nr<k) Cautare(c->ad,adr,k); else if(c->nr>k) Cautare(c->as,adr,k); else adr=c; else adr=0; } void cmmd(Nod *&c, Nod *&f) { if(f->ad) cmmd(c,f->ad); else { c->nr=f->nr; man=f; f=f->as; delete man; } } void Listare(Nod *c) { if(c) { Listare(c->as);

cout<<c->nr<<endl; Listare(c->ad); } } void Stergere(Nod*& c,int k) { Nod *f; if(c) if(c->nr==k) if(c->as==0 && c->ad==0) { delete c; c=0; } else if(c->as==0) { f=c->ad; delete c; c=f; } else if(c->ad==0) { f=c->as; delete c; c=f; } else cmmd(c,c->as); else if(c->nr<k) Stergere(c->ad,k); else Stergere(c->as,k); else cout<<"Numar absent - tentativa esuata!"<<endl; } int main() { cout<<"\nSe exeuta prelucrari in arborele binar de cautare, in functie de optiuni:\n"; cout<<"[I=inserare (in ordinea RSD), C=cautare, L=listare, S=stergere, T=terminare]\n"; v=0; do { cout<<"\nOptiunea: "; cin>>opt; switch(opt) { case 'I': cout<<"Se insereaza in arbore nodul cu numarul: "; cin>>k; Inserare (v,k); break; case 'L': cout<<"Se afiseaza cheile nodurilor, in ordine crescatoare:\n"; Listare(v); break; case 'C': cout<<"Se cauta numarul: "; cin>>k; Cautare(v,man,k); if(man) cout<<"Numarul "<<k<<" a fost gasit in arbore"<<endl;

else cout<<"Nu exista acest numar!"<<endl; break; case 'S': cout<<"Se sterge numarul: "; cin>>k; Stergere(v,k); break; } } while(opt!='T'); return 0; }

Você também pode gostar