22. 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. Sa se memoreze aceste valori intr-un vector. Considerind ca vectorul dat este reprezentarea implicita a unui arbore binar: a) Sa se afiseze in inordine continutul arborelui. b) Sa se afiseze in postordine elementele subarborelui sting al radacinii. c) Sa se determine daca arborele are proprietatea care defineste un arbore binar de cautare. EXEMPLU: Arborele: 5 / \ 3 8 / \ / \ 1 4 6 9 Intrare: 5 3 8 1 4 6 9 0 Iesire: Inordine: 1 3 4 5 6 8 9 ESTE ARBORE BINAR DE CAUTARE ===================================================== int tab[50]; int n; int creare() { int i,j; j=i=1; printf("\n introduceti elementele tabloului :"); while(i) { scanf("%d",&i); if(i) { tab[j]=i; j++; } } return j-1; } void postordine(int i) { if(i<=n) { postordine(i*2); postordine(i*2+1); printf(" %d",tab[i]); } } void inordine(int i) { if(i<=n) { inordine(2*i); printf(" %d",tab[i]); inordine(2*i+1); } } int abc(int i) { if(tab[i]!=0) { if(tab[i]tab[2*i]) { abc(2*i); abc(2*i+1); return 1; } else return 0; } } int heap(int i) { if(tab[i]!=0) { if(tab[i]>tab[2*i] && tab[i]>tab[2*i+1]) { heap(2*i); heap(2*i+1); return 1; } else return 0; } } void extragere(int i) { int parinte,fiu,temp; if(n==0) printf("arbore vid "); else{ printf(" %d",tab[1]); tab[1]=tab[n]; n=n-1; parinte=1; fiu=2; while(fiu<=n) { if(fiu+1<=n && tab[fiu]tab[parinte]) { temp=tab[parinte]; tab[parinte]=tab[fiu]; tab[fiu]=temp; parinte=fiu; fiu=fiu*2; } else fiu=n+1; } } } #include #include #include"ah.cpp" void main(void) { int c; clrscr(); n=creare(); printf("\n postordine :"); postordine(1); printf("\n inordine :"); inordine(1); c=abc(1); if(c==1) printf("\n este arbore binar de cautare "); else printf("\n nu este arbore binar de cautare "); c=heap(1); if(c==1) { printf("\n este arbore heap "); printf("\n sirul ordonat :"); while(n>0) extragere(1); } else printf("\n nu este arbore heap"); getch(); }