Vjezbe 6,7: binarna stabla Na vježbama smo pokazali da je binarno stablo jedinstveno određeno ako mu zadamo PREORDER i INORDER. U programu zad1.c nalazi se funkcija BuildTree koja na temelju stringova koji predstavljaju pre- i inorder gradi odgovarajuće stablo. Osim toga, u programu se nalazi funkcija preorder (za preorder ispis stabla), te kod za funkciju int Brat(BinaryTree T). Funkcija int Brat(BinaryTree T) broji sve čvorove u stablu T koji zadovoljavaju sljedeće uvjete: 1) čvor nije list 2) ima barem 5 potomaka 3) brat od čvora ima točno jedno dijete Obratite pažnju na sve pomoćne funkcije koje smo uveli za potrebe tog zadatka! Zadatci: ----------------------------------- 1) Pokažite da zadavanjem preordera i postordera nismo nužno jedinstveno odredili stablo. 2) Modificirajte funkciju BuildTree tako da kreirate stablo iz POSTORDERA i inordera. 3) Modificirajte funkciju "preorder" tako da dobijete funkciju za rekurzivni inorder ispis 4) Napišite funkciju int visina(BinaryTree T); koja vraća visinu binarnog stabla. 5) Napišite funkciju int pretci_i_potomci(BinaryTree T); koja za stablo T vraća broj čvorova koji imaju barem 3 potomka, barem 5 predaka, i oznaku koja je veća od aritmetičke sredine svih oznaka na tom nivou. 6) Kreirajte binarna stabla koja odgovaraju aritmetičkim izrazima a) (2+3) * (4+5)^2 b) 2^4*3 - 2*2*2 + 3*4 te ih zapišite u prefix i postfix formatu. Popis tipova i funkcija u ATP BinaryTree ----------------------------------------- labeltype node BinaryTree void BiMakeNull(BinaryTree* T); int BiEmpty(BinaryTree T); void BiCreate(labeltype l, BinaryTree TL, BinaryTree TR, BinaryTree* T); void BiLeftSubtree(BinaryTree T, BinaryTree* TL); void BiRightSubtree(BinaryTree T, BinaryTree* TR); node BiInsertLeftChid(labeltype l, node n, BinaryTree* T); node BiInsertRightChid(labeltype l, node n, BinaryTree* T); void BiDelete(node n, BinaryTree* T); node BiRoot(BinaryTree T); node BiLeftChild(node n, BinaryTree T); node BiRightChild(node n, BinaryTree T); node BiParent(node n, BinaryTree T); label BiLabel(node n, BinaryTree T); void BiChangeLabel(labeltype l, node n, BinaryTree* T);