gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Stabla, dodati primeri algoritama nad stablima
[spa2-materijali.git] / Stabla / Primeri za test / StabloProgram.java
diff --git a/Stabla/Primeri za test/StabloProgram.java b/Stabla/Primeri za test/StabloProgram.java
new file mode 100644 (file)
index 0000000..148ce7b
--- /dev/null
@@ -0,0 +1,123 @@
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+class Stablo {\r
+\r
+    public final int id;\r
+    public String vrednost;\r
+    public Stablo levi;\r
+    public Stablo desni;\r
+\r
+    public Stablo(int id) {\r
+        this(id, null);\r
+    }\r
+\r
+    public Stablo(int id, String vrednost) {\r
+        this(id, vrednost, null, null);\r
+    }\r
+\r
+    public Stablo(int id, String vrednost, Stablo levi, Stablo desni) {\r
+        this.id = id;\r
+        this.vrednost = vrednost;\r
+        this.levi = levi;\r
+        this.desni = desni;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "(" + id + " \"" + vrednost + "\"" + (levi == null ? "" : " " + levi) + (desni == null ? "" : " " + desni) + ")";\r
+    }\r
+}\r
+\r
+public class StabloProgram {\r
+\r
+    public static void main(String[] args) {\r
+\r
+        // Ucitavanje stabla\r
+        StabloIO inIO = new StabloIORandom(12345);\r
+        Stablo stablo = inIO.readStablo(null);\r
+\r
+        // Ispisivanje stabla na ekran\r
+        StabloIO outIO = new StabloIOPretty();\r
+        outIO.printStablo(Svetovid.out, stablo);\r
+        Svetovid.out.println();\r
+\r
+        // Broj nivoa\r
+        int brojNivoa = brojNivoa(stablo);\r
+        Svetovid.out.println("Broj nivoa:", brojNivoa);\r
+        Svetovid.out.println();\r
+\r
+        // Broj nivoa\r
+        int brojElementata = brojElementata(stablo);\r
+        Svetovid.out.println("Broj elementata:", brojElementata);\r
+        Svetovid.out.println();\r
+\r
+        // Broj nivoa\r
+        String najduzaVrednost = najduzaVrednost(stablo);\r
+        Svetovid.out.println("Najduza vrednost:", najduzaVrednost);\r
+        Svetovid.out.println();\r
+\r
+        // Svi Putevi od korena do listova\r
+        sviPutevi(stablo, new ArrayList<>(brojNivoa));\r
+        Svetovid.out.println();\r
+\r
+        // Obrnuto stablo\r
+        Stablo obrnuto = obrni(stablo);\r
+        outIO.printStablo(Svetovid.out, obrnuto);\r
+        Svetovid.out.println();\r
+\r
+    }\r
+\r
+    private static int brojElementata(Stablo stablo) {\r
+        if (stablo == null) {\r
+            return 0;\r
+        }\r
+        return 1 + brojElementata(stablo.levi) + brojElementata(stablo.desni);\r
+    }\r
+\r
+    private static int brojNivoa(Stablo stablo) {\r
+        if (stablo == null) {\r
+            return 0;\r
+        }\r
+        return 1 + Math.max(brojNivoa(stablo.levi), brojNivoa(stablo.desni));\r
+    }\r
+\r
+    private static String najduzaVrednost(Stablo stablo) {\r
+        if (stablo == null) {\r
+            return null;\r
+        }\r
+        String rezultat = stablo.vrednost;\r
+        String levaVrednost = najduzaVrednost(stablo.levi);\r
+        String desnaVrednost = najduzaVrednost(stablo.desni);\r
+        if (rezultat == null || (levaVrednost != null && rezultat.length() < levaVrednost.length())) {\r
+            rezultat = levaVrednost;\r
+        }\r
+        if (rezultat == null || (desnaVrednost != null && rezultat.length() < desnaVrednost.length())) {\r
+            rezultat = desnaVrednost;\r
+        }\r
+        return rezultat;\r
+    }\r
+\r
+    private static void sviPutevi(Stablo stablo, List<String> put) {\r
+        if (stablo == null) {\r
+            return;\r
+        }\r
+        put.add(stablo.vrednost);\r
+        if ((stablo.levi == null) && (stablo.desni == null)) {\r
+            Svetovid.out.println("Put: " + put);\r
+        }\r
+        sviPutevi(stablo.levi, put);\r
+        sviPutevi(stablo.desni, put);\r
+        put.remove(put.size() - 1);\r
+    }\r
+\r
+    private static Stablo obrni(Stablo stablo) {\r
+        if (stablo == null) {\r
+            return null;\r
+        }\r
+        Stablo levi = obrni(stablo.levi);\r
+        Stablo desni = obrni(stablo.desni);\r
+        Stablo obrnuto = new Stablo(stablo.id, stablo.vrednost, desni, levi);\r
+        return obrnuto;\r
+    }\r
+}\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner