Zadanie 4
Najneskorší termín odovzdania: 17.3.2024 (nedeľa) o 18:00
Odovzdávané súbory: Osoba.java
, Uzol.java
Doplňujúce požiadavky:
- riešenia, ktoré nebude možné skompilovať (t.j. riešenia so syntaktickými chybami) nebudú hodnotené,
- zdrojový kód správne naformátujte (CTRL+SHIFT+F),
- komentovaný zdrojový kód
Potomkovia so staršími súrodencami (3 body)
V triede Osoba
z prednášky o stromoch pridajte metódu, ktorá vráti počet potomkov v rodostrome tejto osoby (o osobe v koreni rodostromu nevieme počet súrodencov, takže ju neuvažujeme), ktorí majú aspoň 𝑘 starších súrodencov. Predpokladáme, že deti osoby sú v jej zozname usporiadané podľa dátumu narodenia (prvé dieťa v zozname je najstaršie).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Vyvážené stromy? (3 body)
Do triedy Uzol
pridajte metódu jeVyvazeny
, ktorá vráti, či strom, ktorého koreňom je daný uzol, je uzlovo vyvážený. Povieme, že strom je uzlovo vyvážený, ak (1) počet prvkov uložených v ľavom a pravom podstrome sa líši nanajvýš o 1 a (2) ľavý a pravý podstrom daného uzla sú vyvážené.
1 public boolean jeVyvazeny();
Bonus (pre fajnšmekrov): +3 body za riešenie bežiace v čase O(n)
, kde n
je počet uzlov stromu, ktorého koreňom je uzol, na ktorým túto metódu voláme (Rada: vytvorte inú pomocnú privátnu metódu alebo metódy, ktorá vám umožnia úlohu vyriešiť v uvedenom čase). Pre udelenie bonusu sa vyžaduje argumentácia, prečo má uvedený algoritmus časovú zložitosť O(n)
.
Binárne vyhľadávacie stromy (2 body)
Do triedy Uzol
pridajte statickú metódu vytvorBVS
, ktorá vráti referenciu na novovytvorený koreňový uzol binárneho vyhľadávacieho stromu naplného zadanými hodnotami. Vytvorený binárny strom musí mať zároveň minimálnu možnú výšku.
1 public static Uzol vytvorBVS(Set<Integer> hodnoty);
Trieda Uzol
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class Uzol {
private int hodnota;
private Uzol lavy;
private Uzol pravy;
public Uzol(int hodnota, Uzol lavy, Uzol pravy) {
this.hodnota = hodnota;
this.lavy = lavy;
this.pravy = pravy;
}
public int getHodnota() {
return hodnota;
}
public void setHodnota(int hodnota) {
this.hodnota = hodnota;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (lavy != null)
sb.append("(" + lavy.toString() + ") ");
sb.append(hodnota);
if (pravy != null)
sb.append(" (" + pravy.toString() + ")");
return sb.toString();
}
}