gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Stabla, dodati komentari i ideje za veliki test
[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 * Ova klasa sluzi za ucitavanje i snimanje stabala. Nije potrebno znati je,
8 * i bice data, prilikom izrade prakticnih zadataka.
9 *
10 * Ocekivani format fajla je sledeci:
11 *
12 * br
13 * id leviId desniId vrednost (x br)
14 *
15 * Primer fajla je classic.txt
16 */
17 public class StabloIOClassic implements StabloIO {
19 @Override
20 public Stablo readStablo(SvetovidReader in) {
21 int br = in.readInt();
22 Stablo stablo = null;
23 for (int i = 0; i < br; i++) {
24 int id = in.readInt();
25 int leviId = in.readInt();
26 int desniId = in.readInt();
27 String vrednost = in.readLine();
28 Stablo levi = leviId == -1 ? null : new Stablo(leviId);
29 Stablo desni =desniId == -1 ? null : new Stablo(desniId);
30 Stablo element = new Stablo(id, vrednost, levi, desni);
31 stablo = insert(stablo, element);
32 }
33 return stablo;
34 }
36 private static Stablo insert(Stablo stablo, Stablo element) {
37 if (stablo == null) {
38 return element;
39 }
40 Stablo found = find(stablo, element.getId());
41 if (found == null) {
42 throw new NoSuchElementException("id: " + element.getId());
43 }
44 found.setVrednost(element.getVrednost());
45 found.setLevi(element.getLevi());
46 found.setDesni(element.getDesni());
47 return stablo;
48 }
50 private static Stablo find(Stablo stablo, int id) {
51 if (stablo == null) {
52 return null;
53 }
54 if (stablo.getId() == id) {
55 return stablo;
56 }
57 Stablo rezultat = find(stablo.getLevi(), id);
58 if (rezultat != null) {
59 return rezultat;
60 }
61 return find(stablo.getDesni(), id);
62 }
64 @Override
65 public void printStablo(SvetovidWriter out, Stablo stablo) {
66 int br = count(stablo);
67 out.println(br);
68 iterate(out, stablo);
69 }
71 private static int count(Stablo stablo) {
72 if (stablo == null) {
73 return 0;
74 }
75 return 1 + count(stablo.getLevi()) + count(stablo.getDesni());
76 }
78 private static void iterate(SvetovidWriter out, Stablo stablo) {
79 if (stablo == null) {
80 return;
81 }
82 int id = stablo.getId();
83 int leviId = stablo.getLevi() == null ? -1 : stablo.getLevi().getId();
84 int desniId = stablo.getDesni() == null ? -1 : stablo.getDesni().getId();
85 String vrednost = stablo.getVrednost();
86 out.println(id, leviId, desniId, vrednost);
87 iterate(out, stablo.getLevi());
88 iterate(out, stablo.getDesni());
89 }
90 }
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner