U datoteci stablo.in nalaze se dvije rije~ci, svaka
u svom redu, duljine <=70, sastavljene od istih slov~a (svako slovo se
pojavljuje to~cno dvaput, jednom u prvom a jednom u drugom redu).
One predstavljaju inorder i preorder obilazak nekog stabla ~ciji ~cvorovi
su slova. Va~s program treba:
Imamo dva stringa, pre i in, koji predstavljaju preorder i
inorder obilazak. To su argumenti rekurzivne funkcije, koja vra~ta stablo
(pointer na ~cvor) s tim obilascima.
Ako su prazni (ako je jedan prazan, oba su, jer su jednake
duljine), vratimo prazno stablo.
Ina~ce, pogledajmo prvo slovo pre stringa, ono mora biti
korijen. Stavimo ga u korijen. Zatim na~demo to slovo u inorder obilasku
(mora se pojaviti to~cno jednom -- ako ne, javimo gre~sku). Ono nam prirodno
rastavlja in string na dva stringa, in1 i in2. Pogledajmo njihove duljine, neka su to l1 i l2.
Mora biti l1+l2+1=n, gdje je n duljina od in, kao i
duljina od pre. Pa rastavimo string pre bez prvog slova, koji je duljine
n-1, na dva dijela duljine l1 i l2, i ozna~cimo ih s pre1 i pre2.
Sada rekurzivno pozovemo funkciju s in1 i pre1 kao inorder i preorder
obilaskom, i ono ~sto nam ona vrati, mora biti lijevo podstablo korijena K.
Stavimo to u lijevo podstablo.
Opet rekurzivno pozovemo funkciju s in2 i pre2, i ono ~sto nam vrati
stavimo desno od K. Vratimo K.
Za 4 boda mo~zete pretpostaviti da su pre i in stvarno
preorder i inorder obilasci istog stabla. Za 5 bodova morate to i provjeriti (sve ~sto tada smijete pretpostaviti
je da su pre i in nizovi slova duljine najvi~se 70), te javiti gre~sku ako nisu.