20. Se citeste de la intrare un sir de valori numerice intregi, pe o linie, separate de spatii, sir care se incheie cu o valoare 0. a) Sa se introduca valorile citite intr-un arbore binar de cautare (exclusiv valoarea 0 care incheie sirul). b) Sa se afiseze continutul arborelui in inordine. c) Se citeste un numar. Sa se determine daca acesta se afla in arbore. d) Sa se stearga nodul etichetat cu cheia cea mai mare si sa se afiseze, cu aceeasi procedura de afisare, in inordine, arborele rezultat. ===================================================== #include #include #include "arbore.h" void InitArbore ( Nod*& rad ) { rad = NULL; } void CitArbore ( Nod*& rad ) { int nr=0; char c; printf("INTRODUCETI ARBORELE : "); while ( (c=getchar()) != '\n' ) { if ( c >= '0' && c <= '9' ) nr = nr*10+c-'0'; else if ( c != '0' && nr != 0 ) { Insert ( rad,nr ); nr = 0; } } } void Insert ( Nod*& rad,int val) { if ( rad == NULL ) rad = make_nod ( val ); else if ( rad->data > val ) Insert ( rad->stg,val); else Insert ( rad->drt,val); } Nod* make_nod ( int nr ) { Nod* x; x = new Nod; x->data = nr; x->stg = NULL; x->drt = NULL; return x; } void AfisInordine ( Nod* rad ) { if ( rad != NULL ) { if ( rad->stg != NULL ) AfisInordine ( rad->stg ); printf("%d ",rad->data); if ( rad->drt != NULL ) AfisInordine ( rad->drt ); } } int Cauta ( Nod* rad,int val ) { int cond; if ( rad != NULL ) { if ( rad->data == val ) cond = 0; else cond = -1; if ( rad->stg != NULL && cond != 0) cond = Cauta ( rad->stg,val ); if ( rad->drt != NULL && cond != 0) cond = Cauta ( rad->drt,val ); } return cond; } void CautaValoare ( Nod* rad ) { int val; printf("\nValoarea de cautat : "); scanf("%d",&val); if ( Cauta (rad,val) == 0 ) printf("\nValoarea %d se afla in arbore",val); else printf("\nValoarea %d NU se afla in arbore\a",val); } Nod* remove ( Nod*& rad ) { Nod* p; if ( rad -> drt == NULL ) { p = rad; rad = rad->stg; return p; } else return remove ( rad->drt ); } void DeleteValMax ( Nod*& rad ) { Nod* p; p = remove ( rad ); if ( rad == p ) { if ( rad->stg != NULL ) { p = rad; rad = rad->stg; } else if ( rad->drt != NULL ) { p = rad; rad = rad->drt; } } delete p; } #ifndef _ARBORE_ #define _ARBORE_ struct Nod { int data; Nod* stg; Nod* drt; }; void InitArbore ( Nod*& ); void CitArbore ( Nod*& ); void Insert ( Nod*& ,int ); Nod* make_nod ( int ); void AfisInordine ( Nod* ); int Cauta ( Nod* ,int ); void CautaValoare ( Nod* ); void DeleteValMax ( Nod*& ); Nod* remove ( Nod*& ); #endif #include #include #include "arbore.h" void main() { Nod* rad; clrscr(); InitArbore ( rad ); CitArbore ( rad ); printf("Arborele in inordine : "); AfisInordine ( rad ); CautaValoare ( rad ); DeleteValMax ( rad ); printf("\nArborele in inordine : "); AfisInordine ( rad ); getch(); }