DvDrevo.java public class DvDrevo { // konstruktorji public DvDrevo(); // pripravi // metode public boolean prazno(); // prazno public static DvDrevo sestavi(DvDrevo, int, DvDrevo); // sestavi public int koren(); // vrni vrednost iz korena, napaka ce drevo prazno public DvDrevo leviSin()(); // levo poddrevo public DvDrevo desniSin()(); // desno poddrevo } // class
Drevo torej sestaviš tako, da za vsak list pripraviš dve prazni drevesi, ki jih potem "sestaviš" skupaj tako, da imata v korenu vrednost tega lista.
Če potrebuješ več informacij o dvojiških drevesih vprašaj asistenta, si oglej predavanja ali pa poglej na internetno stran University of Saskatchewan.
KOREN: 1 LEVO PODDREVO: KOREN: 3 LEVO PODDREVO: - DESNO PODDREVO: - DESNO PODDREVO: KOREN: 2 LEVO PODDREVO: - DESNO PODDREVO: -Namig: najlažje boš zastavljeno nalogo rešil(a) tako, da metodi izpis dodaš dodaten parameter, ki pomeni globino drevesa, ki ga izpisujemo (ali pa število presledkov v izpisu).
Dobili smo naslednjo metodo:
public static int izberiIzDrevesa(DvDrevo tt, int kateri) {
if (tt.prazno()) return Integer.MIN_VALUE;
if (kateri == 0) return tt.koren();
if (kateri % 2 == 0) return izberiIzDrevesa(tt.leviSin(), kateri/2);
else return izberiIzDrevesa(tt.desniSin(), kateri/2);
}
ki naj bi omogočala izbor poljubnega elementa iz dvojiškega drevesa. Ali lahko pridemo do vseh elementov naslednjega drevesa? Kakšna naj bo vrednost kateri za dostop do posameznega elementa.