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
1 import java.util.NoSuchElementException;
3 import org.svetovid.io.SvetovidReader;
4 import org.svetovid.io.SvetovidWriter;
6 /**
7 * Format:
8 *
9 * br
10 * id leviId desniId vrednost (x br)
11 */
12 public class StabloIOClassic implements StabloIO {
14 @Override
15 public Stablo readStablo(SvetovidReader in) {
16 int br = in.readInt();
17 Stablo stablo = null;
18 for (int i = 0; i < br; i++) {
19 int id = in.readInt();
20 int leviId = in.readInt();
21 int desniId = in.readInt();
22 String vrednost = in.readLine();
23 Stablo levi = leviId == -1 ? null : new Stablo(leviId);
24 Stablo desni =desniId == -1 ? null : new Stablo(desniId);
25 Stablo element = new Stablo(id, vrednost, levi, desni);
26 stablo = insert(stablo, element);
27 }
28 return stablo;
29 }
31 private static Stablo insert(Stablo stablo, Stablo element) {
32 if (stablo == null) {
33 return element;
34 }
35 Stablo found = find(stablo, element.id);
36 if (found == null) {
37 throw new NoSuchElementException("id: " + element.id);
38 }
39 found.vrednost = element.vrednost;
40 found.levi = element.levi;
41 found.desni = element.desni;
42 return stablo;
43 }
45 private static Stablo find(Stablo stablo, int id) {
46 if (stablo == null) {
47 return null;
48 }
49 if (stablo.id == id) {
50 return stablo;
51 }
52 Stablo rezultat = find(stablo.levi, id);
53 if (rezultat != null) {
54 return rezultat;
55 }
56 return find(stablo.desni, id);
57 }
59 @Override
60 public void printStablo(SvetovidWriter out, Stablo stablo) {
61 int br = count(stablo);
62 out.println(br);
63 iterate(out, stablo);
64 }
66 private static int count(Stablo stablo) {
67 if (stablo == null) {
68 return 0;
69 }
70 return 1 + count(stablo.levi) + count(stablo.desni);
71 }
73 private static void iterate(SvetovidWriter out, Stablo stablo) {
74 if (stablo == null) {
75 return;
76 }
77 int id = stablo.id;
78 int leviId = stablo.levi == null ? -1 : stablo.levi.id;
79 int desniId = stablo.desni == null ? -1 : stablo.desni.id;
80 String vrednost = stablo.vrednost;
81 out.println(id, leviId, desniId, vrednost);
82 iterate(out, stablo.levi);
83 iterate(out, stablo.desni);
84 }
85 }
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner