12. Fisierul ARBOREB.H (interfata modulului ARBOREB.CPP) contine: /**************************************************************** Fisierul ARBOREB.H *****************************************************************/ struct Nod{ char data; Nod* stg; Nod* drt; }; Nod* creareArbore(); Functia creareArbore() creeaza o un arbore binar si intoarce un pointer la aceasta. Arborele este creat pornind de la o descriere cu paranteze introdusa de la tastatura, de forma indicata de urmatoarele diagrame de sintaxa: ÉÍÍÍ» ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ - ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÈÍÍͼ ³ Arbore³ ÚÄÄÄÄÄÄ¿ ³ ÄÄįÄÁÄ´ Nume ÃÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄįÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÁ¯Ä ÀÄÄÄÄÄÄÙ ³ ³ ³ ÉÍÍÍ» ÚÄÄÄÄÄÄÄÄ¿ ÉÍÍÍ» ³ À¯¶ ( ÇÄ´ Arbore ÃÂÄÄÄÄÄÄÄįÄÄÄÄÄÄÄÄÂĶ ) ǯ٠ÈÍÍͼ ÀÄÄÄÄÄÄÄÄÙ³ ÉÍÍÍ» ÚÄÄÄÄÄÄÄÄ¿³ ÈÍÍͼ À¯¶ , ÇÄ´ Arbore ÃÙ ÈÍÍͼ ÀÄÄÄÄÄÄÄÄÙ Arborele vid este reprezentat prin caracterul -. De exemplu: Arborele: A va fi dat sub forma: / \ B C A(B,C) Arborele: A va fi dat sub forma: / \ B C A(B(D),C(-,E)) / \ sau D E A(B(D,-),C(-,E)) Spatiile inserate in sirul de caractere introdus de la tastatura sint ignorate. Se cere: a) Sa se afiseze in inordine continutul unui arbore obtinut printr-un apel la functia creareArbore. b) Sa se determine adincimea arborelui dat. c) Sa se determine litera cea mai mare inregistrata in nodurile arborelui dat. d) Sa se determine daca arborele dat este un arbore heap. EXEMPLU DE RULARE: Introduceti arborele: C(B(A),D(-,E)) Arborele parcurs in inordine: A B C D E Adincimea: 3 Litera cea mai mare: E Nu este arbore heap! ===================================================== #include #include #include #include #include #include "arbore.h" char car; int adincstg=1,adincdrt=1; void InitArbore(Nod*& p) { p = NULL; p->stg = NULL; p->drt = NULL; } void eroare() { printf("Sirul de intrare este eronat!\n"); printf("Apasati tasta o tasta..."); getch(); exit(1); } char readchar() { char c; do c=getchar(); while(c==' '); return c; } char citesteNume() { char c; if(!isalpha(car)) eroare(); c = car; car = readchar(); return c; } Nod* citesteArbore() { Nod* rad; if( car=='-' ) { rad=0; car = readchar(); } else { rad = (Nod*) malloc(sizeof(Nod)); rad->data = citesteNume(); if( car!='(' ) { rad->stg = 0; rad->drt = 0; } else { car = readchar(); rad->stg = citesteArbore(); if( car!=',' ) rad->drt = 0; else { car = readchar(); rad->drt = citesteArbore(); } if( car!=')' ) eroare(); car = readchar(); } } return rad; } Nod* creareArbore() { printf("\nIntroduceti arborele:"); car = readchar(); return citesteArbore(); } void AfisInordine(Nod* p) { if(p->stg != NULL) AfisInordine( p->stg ); printf("%c ",p->data); if(p->drt != NULL) AfisInordine( p->drt ); } int AdincimeArbore(Nod* p) { Nod* x; Nod* y; x = p->stg; y = y->drt; if ( x->stg != NULL ) { adincstg ++; adincstg += AdincimeArbore(x->stg); } if ( x->drt != NULL ) { adincstg++; adincstg += AdincimeArbore(x->drt); } if ( y->stg != NULL ) { adincdrt++; adincdrt += AdincimeArbore(x->stg); } if ( y->drt != NULL ) { adincdrt++; adincdrt += AdincimeArbore(x->drt); } if ( adincstg < adincdrt ) return adincdrt; return adincstg; } #ifndef _ARBORE_ #define _ARBORE_ struct Nod{ char data; Nod* stg, *drt; }; Nod* creareArbore(); void eroare(); char readchar(); char citesteNume(); Nod* citesteArbore(); Nod* creareArbore(); void InitArbore(Nod*& ); void AfisInordine(Nod* ); int Adincime(Nod* x); int AdincimeArbore(Nod* p); #endif #include #include #include "arbore.h" void main() { Nod* p; clrscr(); InitArbore(p); p = creareArbore(); AfisInordine(p); printf("ADINCIMEA ARBORELUI ESTE %d ",AdincimeArbore(p)); getch(); }