gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 315d321)
raw | patch | inline | side by side (parent: 315d321)
author | Doni Pracner <quinnuendo@gmail.com> | |
Thu, 22 Dec 2016 11:33:39 +0000 (12:33 +0100) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Thu, 22 Dec 2016 11:33:39 +0000 (12:33 +0100) |
Stabla/konkretnoStablo/BinarnoStablo.java | [new file with mode: 0644] | patch | blob |
Stabla/konkretnoStablo/_zadatak-stabla1.txt | [new file with mode: 0644] | patch | blob |
diff --git a/Stabla/konkretnoStablo/BinarnoStablo.java b/Stabla/konkretnoStablo/BinarnoStablo.java
--- /dev/null
@@ -0,0 +1,72 @@
+// Konkretno stablo koje sadrzi Osobe\r
+class StabloO {\r
+ \r
+ // jedan cvor u stablu sa jednom osobom i pokazivacima\r
+ // na "decu"\r
+ private static class Cvor {\r
+ Osoba osoba;\r
+ Cvor levo;\r
+ Cvor desno;\r
+ }\r
+ \r
+ // koren celog stabla\r
+ private Cvor koren;\r
+ \r
+ // Vraca ukupan broj osoba u stablu\r
+ public int brojOsoba() {\r
+ return brojOsoba(koren);\r
+ }\r
+\r
+ protected static int brojOsoba(Cvor cvor) {\r
+ if (cvor == null) {\r
+ return 0;\r
+ }\r
+ int broj = 1;\r
+ broj = broj + brojOsoba(cvor.levo);\r
+ broj = broj + brojOsoba(cvor.desno);\r
+ return broj;\r
+ }\r
+ \r
+ public int brojNivoa() {\r
+ // Spremimo argumente i pozovemo rekurzivni metod\r
+ return brojNivoa(koren);\r
+ }\r
+\r
+ // Metod koji zapravo resava dati problem\r
+ protected static int brojNivoa(Cvor cvor) {\r
+ if (cvor == null) {\r
+ return 0;\r
+ }\r
+ int brojNivoaLevog = brojNivoa(cvor.levo);\r
+ int brojNivoaDesnog = brojNivoa(cvor.desno);\r
+ return Math.max(brojNivoaLevog, brojNivoaDesnog) + 1;\r
+ }\r
+\r
+}\r
+\r
+// Glavna klasa\r
+public class BinarnoStablo {\r
+\r
+ // Glavni program\r
+ public static void main(String[] args) {\r
+\r
+ // Napravimo pomocni objekat za ucitavanje i ispisivanje\r
+ TreeIO<StabloO> io = new TreeIO<>(StabloO.class);\r
+\r
+ // Procitamo stablo iz fajla\r
+ StabloO stablo = io.read(Svetovid.in("Osobe.txt"));\r
+\r
+ // Ispisemo ucitano stablo\r
+ io.print(Svetovid.out, stablo);\r
+\r
+ // ilustracije poziva metoda\r
+ \r
+ int brojElemenata = stablo.brojOsoba();\r
+ Svetovid.out.println("Broj elemenata:", brojElemenata);\r
+ \r
+ int brojNivoa = stablo.brojNivoa();\r
+ Svetovid.out.println("Broj nivoa:", brojNivoa);\r
+\r
+ // dodati ovde pozive implementiranih metoda\r
+ }\r
+}\r
diff --git a/Stabla/konkretnoStablo/_zadatak-stabla1.txt b/Stabla/konkretnoStablo/_zadatak-stabla1.txt
--- /dev/null
@@ -0,0 +1,149 @@
+************************************************************\r
+ Zadatak - binarna stabla\r
+************************************************************\r
+\r
+Data je klasa BinarnoStablo sa glavnim programom koji\r
+ucitava jedno stablo i poziva neke od operacija nad njim.\r
+U istom fajlu je i klasa `StabloO` koja predstavlja binarno\r
+stablo osoba. Klasa `Osoba` je takodje data implmentirana.\r
+\r
+U okviru klase `StabloO` implementirati operacije navedene u\r
+nastavku i ilustrovati njihov rad pozivanjem iz glavnog\r
+programa u `BinarnoStablo`. Svaki metod je potrebno\r
+implementirati kao javan metod klase `StabloO`, a cesto je\r
+potrebno napravitit i pomocni zasticen staticki metod istog\r
+imena. Pogledati primer implementacije metoda\r
+brojElemenata() i brojNivoa().\r
+\r
+Sve promene treba raditi u fajlu BinarnoStablo.java u kome\r
+su pomenute klase. Ostali fajlovi su klasa `Osoba` koja\r
+predstavlja element koji ubacujemo u konkretnom programu,\r
+kao i pomocne klase koje sluze za ucitavanje stabla iz fajla\r
+u urednom formatu. Ucitavanje stabla na ovaj nacin nije\r
+neophodno uciti, a dato je tacno kako treba da se ucita.\r
+\r
+\r
+Metodi\r
+======\r
+\r
+public boolean jePrazno()\r
+-------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca true ako je stablo prazno, false ako nije.\r
+\r
+public boolean postojiElement(Osoba element)\r
+----------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca true ako se prosledjeni elemnt nalazi u\r
+stablu, false inace.\r
+\r
+Prilikom pretrage stabla koristiti metod equals().\r
+\r
+\r
+public void stampajPreorder()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente preorder nacinom obilaska.\r
+\r
+public void stampajInOrder()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente inorder nacinom obilaska.\r
+\r
+public void stampajPostOrder()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente postorder nacinom obilaska.\r
+\r
+public void stampajListove()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente koji se nalaze u listovima.\r
+\r
+List je cvor koji nema ni levog ni desnog potomka.\r
+\r
+private Cvor pronadji(Osoba element)\r
+------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi dati element i vraca stablo sa korenom\r
+u tom elementu.\r
+\r
+Ako element ne postoji u stablu, vratiti null.\r
+\r
+Ovaj metod koristiti kao pomocni za sledeci.\r
+\r
+\r
+public void stampajSveIspod(Osoba element)\r
+--------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemnte koji su direktni ili indirektni\r
+potomci datog.\r
+\r
+\r
+public boolean ubaci(Osoba roditelj, Osoba potomak, boolean levo)\r
+---------------------------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi element dat u prvom argumentu (roditelj)\r
+i kao njegovog poromka ubacuje element dat u drugom\r
+argumentu (potomak). Ako je treci argument (levo)\r
+true tada se element ubacuje kao levi potomak, a\r
+ako je false, kao desni.\r
+\r
+Ako se na zeljenom mestu vec nalazi nesto, vratiti false\r
+i ne ubacivati element, inace vratiti true pri uspesnom\r
+ubacivanju.\r
+\r
+\r
+public Osoba roditeljOd(Osoba potomak)\r
+--------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi i vraca roditelja datog elementa. Ako\r
+je prosledjeni element koren celog stabla\r
+vratiti null.\r
+\r
+\r
+public Osoba min(Comparator<Osoba> komparator)\r
+public Osoba max(Comparator<Osoba> komparator)\r
+--------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi i vraca najmanji, odnosno najveci, element\r
+stabla.\r
+\r
+Prilikom pretrage koristiti prosledjeni komparator.\r
+\r
+Za testiranje je dat `KomparatorPoPlati`, napraviti\r
+druge po potrebi.\r
+\r
+\r
+public StabloO kopija()\r
+-------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca kopiju stabla.\r
+\r
+Potrebno je iskopirati i sve cvorove kako izmene\r
+jednog stabla ne bi uticale na drugo.\r
+\r
+\r
+public StabloO obrnuto()\r
+--------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca novo stablo nastalo obrtanjem originalng.\r
+Stablo se obrce tako sto se zamene mesta levih\r
+i desnih podstabala koja se pre toga takogje\r
+obrnu.\r
+\r
+Posle poziva metoda originalno stablo mora ostati\r
+nepromenjeno.\r