18. 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 in inordine continutul arborelui. c) Sa se afiseze adincimea arborelui. d) Se citeste un numar pozitiv K. Sa se determine daca exista un nod pentru care modulul diferentei dintre numarul de noduri din subarborele sting si numarul de noduri din subarborele drept este mai mare sau egal cu K. EXEMPLU: Intrare: 5 3 7 10 4 9 1 11 0 Diferenta K: 3 Arborele binar de cautare: 5 / \ 3 7 / \ \ 1 4 10 / \ 9 11 Iesire: Arborele: 1 3 4 5 7 9 10 11 Adincimea: 4 Exista nod cu proprietatea ceruta la puncul (d)! (nodul 7) ===================================================== #include #include #include "arbore.h" void InitArbore ( Nod*& rad ) { rad = NULL; } void CitArbore ( Nod*& rad ) { char c; int nr = 0; printf("Introduceti arborele : " ); while ( (c=getchar()) != '\n' ) { if ( c >='0' && c <= '9' ) nr = nr*10+c-'0'; else if ( c != '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 val ) { Nod* x; x = new Nod; x->data = val; 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 AdincimeArbore ( Nod* rad) { int s,d; if ( rad == NULL ) return 0; else if ( (s=AdincimeArbore(rad->stg)) > (d=AdincimeArbore(rad->drt)) ) return(s+1); else return(d+1); } void CondD ( Nod* rad ) { int k; printf("\nIntroduceti numarul k : "); scanf("%d",&k); Cond ( rad,k ); } void Cond ( Nod* rad,int k ) { int s,d,z; if ( rad != NULL ) { s = AdincimeArbore(rad->stg); d = AdincimeArbore(rad->drt); z = modul(s,d); if ( z >= k-1 ) printf("Exista nod cu proprietatea ceruta la puncul (d)! (nodul %d )\n",rad->data); if ( rad->stg != NULL ) Cond ( rad->stg,k ); if ( rad->drt != NULL ) Cond ( rad->drt,k ); } } int modul ( int a,int b) { int s; s = a-b; if ( s < 0 ) return(s*(-1)); else return(s); } #ifndef _ARBORE_ #define _ARBORE_ struct Nod{ int data; Nod* stg, *drt; }; void InitArbore ( Nod*& ); void CitArbore ( Nod*& ); void Insert ( Nod*& ,int ); Nod* Make_Nod ( int ); void AfisInordine ( Nod* ); int AdincimeArbore ( Nod* ); void CondD ( Nod* ); void Cond ( Nod* ,int); int modul ( int ,int ); #endif #include #include #include "arbore.h" void main() { Nod* rad; clrscr(); InitArbore ( rad ); CitArbore ( rad ); printf("Arborele afisat in inordine : "); AfisInordine ( rad ); printf("\nAdincimea arborelui : %d",AdincimeArbore( rad )); CondD ( rad ); getch(); }