gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under
the git version control system
2 import java
.util
.ArrayList
;
4 import java
.util
.NoSuchElementException
;
5 import java
.util
.Objects
;
7 import org
.svetovid
.Svetovid
;
9 // Konkretno stablo koje sadrzi ocene
12 // Tip koji opisuje jedan cvor u stablu
13 protected static class Cvor
{
16 public final Osoba osoba
;
18 // Levo i desno podstablo
19 public final Cvor levo
;
20 public final Cvor desno
;
23 public Cvor(Osoba osoba
, Cvor levo
, Cvor desno
) {
30 // Stablo ima referencu na korenski cvor
31 protected final Cvor koren
;
33 // Kreiramo prazno stablo
34 public StabloOsoba() {
38 // Kreiramo stablo sa jednom osobom u korenu
39 // i praznim evim i desnim podstablom
40 public StabloOsoba(Osoba osoba
) {
41 koren
= new Cvor(osoba
, null, null);
44 // Specijalan konstruktor koji koriste neki metodi ove klase
45 protected StabloOsoba(Cvor koren
) {
49 // Vraca osobu koja je direktor cele firme
50 public Osoba
getDirektor() {
51 if (koren
== null) { // Stablo je prazno
52 throw new NoSuchElementException();
57 // Vraca ukupan broj osoba u stablu
58 public int brojOsoba() {
59 return brojOsoba(koren
);
62 protected static int brojOsoba(Cvor cvor
) {
67 broj
= broj
+ brojOsoba(cvor
.levo
);
68 broj
= broj
+ brojOsoba(cvor
.desno
);
73 public void stampajSveOsobe() {
74 stampajSveOsobe(koren
);
77 protected static void stampajSveOsobe(Cvor cvor
) {
81 stampajSveOsobe(cvor
.levo
);
82 Svetovid
.out
.println(cvor
.osoba
);
83 stampajSveOsobe(cvor
.desno
);
86 // Vraca listu svih osoba
87 public List
<Osoba
> sveOsobe() {
88 List
<Osoba
> osobe
= new ArrayList
<>();
89 sveOsobe(koren
, osobe
);
93 protected static void sveOsobe(Cvor cvor
, List
<Osoba
> lista
) {
97 sveOsobe(cvor
.levo
, lista
);
98 lista
.add(cvor
.osoba
);
99 sveOsobe(cvor
.desno
, lista
);
102 // Pronalazi datu osobu i vraca stablo sa korenom u njoj
103 public StabloOsoba
pronadji(Osoba osoba
) {
104 Cvor cvor
= pronadji(koren
, osoba
);
108 return new StabloOsoba(cvor
);
111 protected static Cvor
pronadji(Cvor cvor
, Osoba osoba
) {
115 if (Objects
.equals(cvor
.osoba
, osoba
)) {
118 Cvor nadjenLevo
= pronadji(cvor
.levo
, osoba
);
119 if (nadjenLevo
!= null) {
122 Cvor nadjenDesno
= pronadji(cvor
.desno
, osoba
);
123 if (nadjenDesno
!= null) {
129 // Pronalazi sefa date osobe
130 public Osoba
sefOd(Osoba podredjeni
) {
131 Cvor cvor
= sefOd(koren
, null, podredjeni
);
138 protected static Cvor
sefOd(Cvor tekuci
, Cvor roditelj
, Osoba podredjeni
) {
139 if (tekuci
== null) {
142 if (Objects
.equals(tekuci
.osoba
, podredjeni
)) {
145 Cvor roditeljLevo
= sefOd(tekuci
.levo
, tekuci
, podredjeni
);
146 if (roditeljLevo
!= null) {
149 Cvor roditeljDesno
= sefOd(tekuci
.desno
, tekuci
, podredjeni
);
150 if (roditeljDesno
!= null) {
151 return roditeljDesno
;
156 // Vraca listu svih osoba sa platom manjom od granice
157 public List
<Osoba
> sviSaPlatomIspod(int granica
) {
158 List
<Osoba
> osobe
= new ArrayList
<>();
159 sviSaPlatomIspod(koren
, osobe
, granica
);
163 protected static void sviSaPlatomIspod(Cvor cvor
, List
<Osoba
> lista
, int granica
) {
167 if (cvor
.osoba
.getPlata() < granica
) {
168 lista
.add(cvor
.osoba
);
170 sviSaPlatomIspod(cvor
.levo
, lista
, granica
);
171 sviSaPlatomIspod(cvor
.desno
, lista
, granica
);
174 // Vraca listu svih osoba podredjenih datoj
175 public List
<Osoba
> sviPodredjeni(Osoba sef
) {
176 List
<Osoba
> osobe
= new ArrayList
<>();
177 Cvor cvor
= pronadji(koren
, sef
);
179 sveOsobe(cvor
, osobe
);
184 // Ispisuje sve puteve u stablu od korena do svih listova
185 public void odDirektoraDoSpremacice() {
186 List
<Osoba
> put
= new ArrayList
<>();
187 odDirektoraDoSpremacice(koren
, put
);
190 protected static void odDirektoraDoSpremacice(Cvor cvor
, List
<Osoba
> put
) {
195 if ((cvor
.levo
== null) && (cvor
.desno
== null)) {
196 Svetovid
.out
.println(put
);
198 odDirektoraDoSpremacice(cvor
.levo
, put
);
199 odDirektoraDoSpremacice(cvor
.desno
, put
);
200 put
.remove(put
.size() - 1);
205 public class StabloOsobaProgram
{
208 public static void main(String
[] args
) {
210 // Napravimo pomocni objekat za ucitavanje i ispisivanje
211 TreeIO
<StabloOsoba
> io
= new TreeIO
<>(StabloOsoba
.class);
213 // Procitamo stablo iz fajla
214 StabloOsoba stablo
= io
.read(Svetovid
.in("Osobe.txt"));
216 // Ispisemo ucitano stablo
217 io
.print(Svetovid
.out
, stablo
);
219 // Osoba koju cemo traziti u stablu
220 Osoba osobaX
= new Osoba("Nikola", "Nikolic-Nikolic", 0);
223 int br
= stablo
.brojOsoba();
224 Svetovid
.out
.println();
225 Svetovid
.out
.println("Broj osoba u firmi: " + br
);
227 // Stampanje svih osoba
228 Svetovid
.out
.println();
229 Svetovid
.out
.println("Te osobe su: ");
230 stablo
.stampajSveOsobe();
232 // Preuzimanje osoba u listu
233 List
<Osoba
> sveOsobe
= stablo
.sveOsobe();
234 Svetovid
.out
.println();
235 Svetovid
.out
.println("Ili kako lista: " + sveOsobe
);
237 // Podstablo sa Nikolom kao korenom
238 StabloOsoba podstablo
= stablo
.pronadji(osobaX
);
239 Svetovid
.out
.println();
240 Svetovid
.out
.println(osobaX
+ " i podredjeni:");
241 io
.print(Svetovid
.out
, podstablo
);
244 Svetovid
.out
.println();
245 Osoba sef
= stablo
.sefOd(osobaX
);
247 Svetovid
.out
.println("Sef od " + osobaX
+ " je " + sef
);
249 Svetovid
.out
.println(osobaX
+ " je direktor");
253 int plata
= podstablo
.getDirektor().getPlata();
254 Svetovid
.out
.println();
255 Svetovid
.out
.println("Plata od " + podstablo
.getDirektor() + " je " + plata
+ "din");
256 List
<Osoba
> sviSaPlatomIspod
= stablo
.sviSaPlatomIspod(plata
);
257 Svetovid
.out
.println();
258 Svetovid
.out
.println("Svi koji imaju platu manju od " + podstablo
.getDirektor() + " su: " + sviSaPlatomIspod
);
261 List
<Osoba
> sviPodredjeni
= stablo
.sviPodredjeni(osobaX
);
262 Svetovid
.out
.println();
263 Svetovid
.out
.println("Svi koji podredjeni od " + podstablo
.getDirektor() + " su: " + sviPodredjeni
);
265 // Struktura firme od diroktora do svakog zaposlenog koji nema podredjene
266 Svetovid
.out
.println();
267 Svetovid
.out
.println("Hijerarhija sefova za svakog zaposlenog koji nema svoje podredjene:");
268 stablo
.odDirektoraDoSpremacice();
Svarog.pmf.uns.ac.rs/gitweb
maintanance
Doni Pracner