gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/Stabla/StabloOpstegTipa/StabloProgram.java b/Stabla/StabloOpstegTipa/StabloProgram.java
--- /dev/null
@@ -0,0 +1,167 @@
+import java.util.NoSuchElementException;\r
+//@interface DatoNaVezbama {}\r
+\r
+// Tip podataka koji sadrzi binarno stablo\r
+class BinarnoStablo<T> {\r
+\r
+ // Tip podataka koji opisuje jedan cvor stabla\r
+ private static class Cvor<T> {\r
+ \r
+ T element;\r
+ Cvor<T> levo;\r
+ Cvor<T> desno;\r
+\r
+ Cvor(T element, Cvor<T> levo, Cvor<T> desno) {\r
+ this.element = element;\r
+ this.levo = levo;\r
+ this.desno = desno;\r
+ }\r
+ }\r
+\r
+ // Cvor koji je koren stabla\r
+ // Ako je stablo prazno, koren je null\r
+ protected Cvor<T> koren;\r
+\r
+ // Kreiramo prazno stablo\r
+ public BinarnoStablo() {\r
+ koren = null;\r
+ }\r
+\r
+ // Kreiramo stablo sa datim elementom u korenu\r
+ // bez levog i desnog podstabla\r
+ public BinarnoStablo(T element) {\r
+ koren = new Cvor<>(element, null, null);\r
+ }\r
+\r
+ // Kreiramo novo stablo sa datim elementom u korenu\r
+ // i datim levim i desnim podstablom\r
+ public BinarnoStablo(T element, BinarnoStablo<T> levo, BinarnoStablo<T> desno) {\r
+ koren = new Cvor<T>(element, levo.koren, desno.koren);\r
+ }\r
+\r
+ // Zasticeni konstruktor za kreiranje novog stabla\r
+ // sa korenom u datom cvoru ovog stabla\r
+ protected BinarnoStablo(Cvor<T> koren) {\r
+ this.koren = koren;\r
+ }\r
+\r
+ public T getElement() {\r
+ if (koren == null) { // Stablo je prazno\r
+ throw new NoSuchElementException();\r
+ }\r
+ return koren.element;\r
+ }\r
+\r
+ public void setElement(T element) {\r
+ if (koren == null) { // Stablo je prazno\r
+ throw new NoSuchElementException();\r
+ }\r
+ koren.element = element;\r
+ }\r
+\r
+ public BinarnoStablo<T> getLevoPodstablo() {\r
+ if (koren == null) { // Stablo je prazno\r
+ throw new NoSuchElementException();\r
+ }\r
+ if (koren.levo == null) { // Nema levog podstabla\r
+ return null;\r
+ }\r
+ return new BinarnoStablo<T>(koren.levo);\r
+ }\r
+\r
+ public void setLevoPodstablo(BinarnoStablo<T> levo) {\r
+ if (koren == null) { // Stablo je prazno\r
+ throw new NoSuchElementException();\r
+ }\r
+ if (levo == null) {\r
+ koren.levo = null;\r
+ } else {\r
+ koren.levo = levo.koren;\r
+ }\r
+ }\r
+\r
+ public BinarnoStablo<T> getDesnoPodstablo() {\r
+ if (koren == null) { // Stablo je prazno\r
+ throw new NoSuchElementException();\r
+ }\r
+ if (koren.desno == null) {\r
+ return null;\r
+ }\r
+ return new BinarnoStablo<T>(koren.desno);\r
+ }\r
+\r
+ public void setDesnoPodstablo(BinarnoStablo<T> desno) {\r
+ if (koren == null) { // Stablo je prazno\r
+ throw new NoSuchElementException();\r
+ }\r
+ if (desno == null) {\r
+ koren.desno = null;\r
+ } else {\r
+ koren.desno = desno.koren;\r
+ }\r
+ }\r
+\r
+// @DatoNaVezbama\r
+ public int brojElemenata() {\r
+ // Spremimo argumente i pozovemo rekurzivni metod\r
+ return brojElemenata(koren);\r
+ }\r
+\r
+ // @DatoNaVezbama\r
+ // Metod koji zapravo resava dati problem\r
+ protected static <T> int brojElemenata(Cvor<T> cvor) {\r
+ if (cvor == null) {\r
+ return 0;\r
+ }\r
+ int broj = 1;\r
+ broj = broj + brojElemenata(cvor.levo);\r
+ broj = broj + brojElemenata(cvor.desno);\r
+ return broj;\r
+ }\r
+\r
+ // @DatoNaVezbama\r
+ public int brojNivoa() {\r
+ // Spremimo argumente i pozovemo rekurzivni metod\r
+ return brojNivoa(koren);\r
+ }\r
+\r
+ @DatoNaVezbama\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
+// Glavna klasa\r
+public class StabloProgram {\r
+\r
+ // Glavni program\r
+ public static void main(String[] args) {\r
+\r
+ // Kreiramo objekat koji koristimo za ucitavanje i ispisivanje stabla\r
+ StabloIOPretty<Osoba> io = new StabloIOPretty<>(Konverter.OSOBA);\r
+\r
+ // Ucitamo stablo\r
+ BinarnoStablo<Osoba> stablo = io.readStablo(Svetovid.in("Osobe.txt"));\r
+\r
+ // Ispisemo ucitano stablo na ekran\r
+ io.printStablo(Svetovid.out, stablo);\r
+ Svetovid.out.println();\r
+\r
+ // Ilustrujemo poziv metoda\r
+ \r
+ int brojElemenata = stablo.brojElemenata();\r
+ Svetovid.out.println("Broj elemenata:", brojElemenata);\r
+ \r
+ int brojNivoa = stablo.brojNivoa();\r
+ Svetovid.out.println("Broj nivoa:", brojNivoa);\r
+\r
+ // TODO Dodati pozive ostalih metoda\r
+\r
+ }\r
+}\r