Tehtävien deadline: ma-su yö 29.2. 1:59.
Viikon teemana on erilaisten metodien toteuttaminen binääripuille. Rekursiosta on erittäin paljon hyötyä!
Sinulle on annettu binääripuu ja tehtäväsi on selvittää, mikä on pienin puussa esiintyvä arvo.
Toteuta seuraava metodi:
int minimi(Puu puu)
Parametri puu
on binääripuu,
jossa on 1..105
solmua. Solmuissa esiintyvät arvot ovat välillä 1..109
.
Metodin tulee palauttaa pienin puussa esiintyvä arvo.
Seuraava koodi testaa metodia:
Puu puu = new Puu(7, new Puu(5, new Puu(2, null, null), null), new Puu(6, new Puu(3, null, null), new Puu(1, null, null))); System.out.println(minimi(puu));
Koodin tulostuksen tulisi olla seuraava:
1
Sinulle on annettu kaksi binääripuuta, ja tehtäväsi on tutkia, ovatko puut samanlaiset eli onko puiden rakenne samanlainen ja onko niissä samat arvot kaikissa kohdissa.
Toteuta seuraava metodi:
boolean samanlaiset(Puu a, Puu b)
Parametrit a
ja b
ovat tutkittavat binääripuut.
Molemmat sisältävät 1..105
solmua.
Metodin tulee palauttaa
true
, jos puut ovat samanlaiset,
ja muuten false
.
Seuraava koodi testaa metodia:
Puu puu1 = new Puu(1, new Puu(3, new Puu(2, null, null), new Puu(1, null, null)), new Puu(3, new Puu(3, null, null), new Puu(2, null, null))); Puu puu2 = new Puu(1, new Puu(3, new Puu(2, null, null), new Puu(1, null, null)), new Puu(3, new Puu(3, null, null), new Puu(2, null, null))); System.out.println(samanlaiset(puu1, puu2));
Koodin tulostuksen tulisi olla seuraava:
true
Sinulle on annettu binääripuu
ja tehtäväsi on tutkia,
toteuttaako puu ns. AVL-ehdon, eli onko jokaisen puun solmun vasemman ja oikean alipuun korkeuksien ero korkeintaan 1
. Tämä ehto on tärkeä AVL-puun, joka on eräs tasapainoitettu binäärihakupuu, toteutuksessa. Tasapainotettuihin binäärihakupuihin päästään seuraavalla viikolla.
Toteuta seuraava metodi:
boolean onkoAVL(Puu puu)
Parametri puu
on binääripuu,
jossa on 1..105
solmua.
Metodin tulee palauttaa
true
, jos puu toteuttaa AVL-ehdon,
ja muuten false
.
o o o / \ / \ / \ o o o o o o /\ /\ / / \ / \ |\ o o o o o o o o o o o / \ \ / \ / \ o o o o o o o
o o o / \ / \ / \ o o o o o o /\ /\ / / \ / \ \ o o o o o o o o o o / \ / \ / \ / \ / \ o o o o o o o o o o \ o
Yllä olevat esimerkkipuut ovat esimerkkisyötteinä.
Tiedetään, että puussa jokaisen solmuparin välillä on yksikäsitteinen polku, joka kulkee enintään kerran minkään solun läpi. Tehtävänäsi on etsiä pisin mahdollinen tällaisen polun pituus puusta, joka annetaan syötteenä.
Toteuta seuraava metodi:
int pisinPolku(Puu puu)
Parametri puu
on binääripuu,
jossa on 1..105
solmua.
Metodin tulee palauttaa pisimmän polun pituus jonkin kahden solmun välillä.
Seuraava koodi testaa metodia:
Puu puu = new Puu(1, new Puu(3, new Puu(2, null, null), null), new Puu(3, new Puu(3, null, null), new Puu(2, null, null))); System.out.println(pisinPolku(puu));
Koodin tulostuksen tulisi olla seuraava:
4
Sinulle on annettu binääripuun esi- ja sisäjärjestys. Tehtäväsi on muodostaa niiden perusteella jälkijärjestys.
Esijärjestys käy ensin puun juuressa, sitten vasemmassa alipuussa ja lopuksi oikeassa alipuussa. Sisäjärjestys käy ensin vasemmassa alipuussa, sitten puun juuressa ja lopuksi oikeassa alipuussa. Jälkijärjestys käy ensin vasemmassa alipuussa, sitten oikeassa alipuussa ja lopuksi puun juuressa.
Esimerkiksi binääripuuta
B / \ D A / \ C E
vastaa esijärjestys BDACE, sisäjärjestys DBCAE ja jälkijärjestys DCEAB.
Toteuta seuraava metodi:
String jalki(String esi, String sisa)
Parametrit esi
ja sisa
kuvaavat binääripuun esi- ja sisäjärjestyksen.
Binääripuussa on 1..26
solmua ja niiden tunnukset
ovat suuret kirjaimet A:sta lähtien.
Metodin tulee palauttaa binääripuun jälkijärjestys vastaavassa muodossa.
# | metodin kutsu | haluttu palautusarvo |
---|---|---|
1 | jalki("BDACE", "DBCAE") | "DCEAB" |
2 | jalki("ABCD", "DCBA") | "DCBA" |
3 | jalki("ABCD", "ACDB") | "DCBA" |
4 | jalki("GEABFCD", "AEBGCFD") | "ABECDFG" |