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 / StabloIOClassic.java
diff --git a/Stabla/Primeri za test/StabloIOClassic.java b/Stabla/Primeri za test/StabloIOClassic.java
new file mode 100644 (file)
index 0000000..dcf1d9f
--- /dev/null
@@ -0,0 +1,85 @@
+import java.util.NoSuchElementException;\r
+\r
+import org.svetovid.io.SvetovidReader;\r
+import org.svetovid.io.SvetovidWriter;\r
+\r
+/**\r
+ * Format:\r
+ *\r
+ * br\r
+ * id leviId desniId vrednost (x br)\r
+ */\r
+public class StabloIOClassic implements StabloIO {\r
+\r
+    @Override\r
+    public Stablo readStablo(SvetovidReader in) {\r
+        int br = in.readInt();\r
+        Stablo stablo = null;\r
+        for (int i = 0; i < br; i++) {\r
+            int id = in.readInt();\r
+            int leviId = in.readInt();\r
+            int desniId = in.readInt();\r
+            String vrednost = in.readLine();\r
+            Stablo levi = leviId == -1 ? null : new Stablo(leviId);\r
+            Stablo desni =desniId == -1 ? null : new Stablo(desniId);\r
+            Stablo element = new Stablo(id, vrednost, levi, desni);\r
+            stablo = insert(stablo, element);\r
+        }\r
+        return stablo;\r
+    }\r
+\r
+    private static Stablo insert(Stablo stablo, Stablo element) {\r
+        if (stablo == null) {\r
+            return element;\r
+        }\r
+        Stablo found = find(stablo, element.id);\r
+        if (found == null) {\r
+            throw new NoSuchElementException("id: " + element.id);\r
+        }\r
+        found.vrednost = element.vrednost;\r
+        found.levi = element.levi;\r
+        found.desni = element.desni;\r
+        return stablo;\r
+    }\r
+\r
+    private static Stablo find(Stablo stablo, int id) {\r
+        if (stablo == null) {\r
+            return null;\r
+        }\r
+        if (stablo.id == id) {\r
+            return stablo;\r
+        }\r
+        Stablo rezultat = find(stablo.levi, id);\r
+        if (rezultat != null) {\r
+            return rezultat;\r
+        }\r
+        return find(stablo.desni, id);\r
+    }\r
+\r
+    @Override\r
+    public void printStablo(SvetovidWriter out, Stablo stablo) {\r
+        int br = count(stablo);\r
+        out.println(br);\r
+        iterate(out, stablo);\r
+    }\r
+\r
+    private static int count(Stablo stablo) {\r
+        if (stablo == null) {\r
+            return 0;\r
+        }\r
+        return 1 + count(stablo.levi) + count(stablo.desni);\r
+    }\r
+\r
+    private static void iterate(SvetovidWriter out, Stablo stablo) {\r
+        if (stablo == null) {\r
+            return;\r
+        }\r
+        int id = stablo.id;\r
+        int leviId = stablo.levi == null ? -1 : stablo.levi.id;\r
+        int desniId = stablo.desni == null ? -1 : stablo.desni.id;\r
+        String vrednost = stablo.vrednost;\r
+        out.println(id, leviId, desniId, vrednost);\r
+        iterate(out, stablo.levi);\r
+        iterate(out, stablo.desni);\r
+    }\r
+}\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner