Binäärinen hakupuu Jokaisessa solmussa on yksikäsitteinen avain vasemmat jälkeläiset < nykyinen solmu < oikeat jälkeläiset 9 6 11 5 7 10
Binäärisen hakupuun läpikäynti sisäjärjestyksessä (inorder) Järjestys: vasen alipuu - juuri - oikea alipuu 5 6 7 9 10 11 9 6 11 void sisajarjestys(puuos alkio){ if(alkio){ sisajarjestys(alkio->vasen); tulosta_alkio(alkio); sisajarjestys(alkio->oikea); } 5 7 10
Maksimi- ja minimikeko Täydellinen binääripuu jonka jokaisen solmun avain on suurempi (pienempi) tai yhtäsuuri kuin lasten avain Suurimman (pienimmän) alkion etsiminen on nopeaa
Keon toteutus Juuri = 1 i:n vasen lapsi = 2*i i:n oikea lapsi = 2*i+1 i:n vanhempi = i/2 x[1] x[2] X[3] x[4] x[5] X[6]
Keko – nosta (siftup) funktio 12 20 15 29 23 17 22 35 40 26 51 19 13
Keko – nosta (siftup) funktio 12 20 15 29 23 13 22 35 40 26 51 19 17
Keko – nosta (siftup) funktio 12 20 13 29 23 15 22 35 40 26 51 19 17
Keko – nosta (siftup) funktio 12 20 13 29 23 15 22 35 40 26 51 19 17
Keko – poista juuresta 12 20 13 29 23 15 22 35 40 26 51 19 17
Keko – poista juuresta 20 13 29 23 15 22 35 40 26 51 19 17
Keko – siftdown 17 20 13 29 23 15 22 35 40 26 51 19
Keko – siftdown 13 20 17 29 23 15 22 35 40 26 51 19
Keko – siftdown 13 20 15 29 23 17 22 35 40 26 51 19
Keko – siftdown 13 20 15 29 23 17 22 35 40 26 51 19
Lapsi vasemmalle, sisarukset oikealle
Joukot Joukot voidaan esittää metsien avulla Metsä on ei-tyhjä joukko erillisiä puita
Joukot int etsi_joukko(int alkio) { for(; vanhempi[alkio] >= 0; alkio = vanhempi[alkio]) { ; /* tyhjä lause */ } return alkio; } void unioni(int alkio1, int alkio2) { vanhempi[alkio1] = alkio2; /* sijoit. joukko toisen alipuuksi */ }