************************************************************ Zadatak - binarna stabla ************************************************************ Data je klasa BinarnoStablo koja implementira opste binarno stablo. Takodje je dat i glavni program koji ucitava jedno stablo i poziva neke od operacija nad njim. Implementirati operacije navedene u nastavku i ilustrovati njihov rad pozivanjem iz glavnog programa. Svaki metod je potrebno implementirati kao javan metod klase BinarnoStablo, uz pomocni zasticen staticki metod istog imena. Pogledati primer implementacije metoda brojElemenata() i brojNivoa(). Sve promene treba raditi u fajlu StabloProgram.java u kome su pomenute klase. Ostali fajlovi su klasa Osoba koja predstavlja element koji ubacujemo u konkretnom programu, kao i pomocne klase koje sluze za ucitavanje stabla iz fajla u urednom formatu. Ucitavanje stabla na ovaj nacin nije neophodno uciti. Metodi ====== public boolean jePrazno() ------------------------- U klasi BinarnoStablo, implementirati metod koji vraca true ako je stablo prazno, false ako nije. public boolean postojiElement(T element) ---------------------------------------- U klasi BinarnoStablo, implementirati metod koji vraca true ako se prosledjeni elemnt nalazi u stablu, false inace. Prilikom pretrage stabla koristiti metod equals(). public void stampajPreorder() ---------------------------- U klasi BinarnoStablo, implementirati metod koji stampa sve elemente preorder nacinom obilaska. public void stampajInOrder() ---------------------------- U klasi BinarnoStablo, implementirati metod koji stampa sve elemente inorder nacinom obilaska. public void stampajPostOrder() ---------------------------- U klasi BinarnoStablo, implementirati metod koji stampa sve elemente postorder nacinom obilaska. public void stampajListove() ---------------------------- U klasi BinarnoStablo, implementirati metod koji stampa sve elemente koji se nalaze u listovima. List je cvor koji nema ni levog ni desnog potomka. private Cvor pronadji(T element) ------------------------------------ U klasi BinarnoStablo, implementirati metod koji pronalazi dati element i vraca stablo sa korenom u tom elementu. Ako element ne postoji u stablu, vratiti null. Ovaj metod koristiti kao pomocni za sledeci. public void stampajSveIspod(T element) -------------------------------------- U klasi BinarnoStablo, implementirati metod koji stampa sve elemnte koji su direktni ili indirektni potomci datog. public boolean ubaci(T roditelj, T potomak, boolean levo) --------------------------------------------------------- U klasi BinarnoStablo, implementirati metod koji pronalazi element dat u prvom argumentu (roditelj) i kao njegovog poromka ubacuje element dat u drugom argumentu (potomak). Ako je treci argument (levo) true tada se element ubacuje kao levi potomak, a ako je false, kao desni. Ako se na zeljenom mestu vec nalazi nesto, vratiti false i ne ubacivati element, inace vratiti true pri uspesnom ubacivanju. public T roditeljOd(T potomak) -------------------------------------- U klasi BinarnoStablo, implementirati metod koji pronalazi i vraca roditelja datog elementa. Ako je prosledjeni element koren celog stabla vratiti null. public T min(Comparator komparator) public T max(Comparator komparator) -------------------------------------- U klasi BinarnoStablo, implementirati metod koji pronalazi i vraca najmanji, odnosno najveci, element stabla. Prilikom pretrage koristiti prosledjeni komparator. public BinarnoStablo kopija() ------------------------- U klasi BinarnoStablo, implementirati metod koji vraca kopiju stabla. Potrebno je iskopirati i sve cvorove kako izmene jednog stabla ne bi uticale na drugo. public BinarnoStablo obrnuto() -------------------------- U klasi BinarnoStablo, implementirati metod koji vraca novo stablo nastalo obrtanjem originalng. Stablo se obrce tako sto se zamene mesta levih i desnih podstabala koja se pre toga takogje obrnu. Posle poziva metoda originalno stablo mora ostati nepromenjeno.