Tehtäväsi on selvittää, missä järjestyksessä luvut tulee lisätä tyhjään binäärihakupuuhun, jotta puun korkeudesta tulee mahdollisimman pieni. Voit antaa minkä tahansa kelvollisen ratkaisun. Voit olettaa, että puussa on enintään 100 solmua.
Toteuta tiedostoon fillorder.py
funktio create
, joka palauttaa jonkin lukujen permutaation, joka minimoi hakupuun korkeuden.
def create(n): # TODO if __name__ == "__main__": print(create(1)) # [1] print(create(3)) # [2, 3, 1] print(create(4)) # [2, 1, 4, 3] print(create(7)) # [4, 6, 5, 2, 3, 7, 1]
Selitys: Jos , yksi kelvollinen ratkaisu on laittaa luvut hakupuuhun järjestyksessä . Tällöin luku asetetaan puun juureksi, luku tämän oikeaksi lapseksi ja luku juuren vasemmaksi lapseksi. Luvut ja päätyvät siis syvyydelle 1. Kuitenkin esimerkiksi järjestys ei olisi kelvollinen. Nyt luku päätyy puun juureksi, tämän oikeaksi lapseksi ja luvun oikeaksi lapseksi. Luku päätyy siis syvyydelle 2, mikä on suurempi kuin minkään solmun syvyys optimaalisessa järjestyksessä.