CSES - Solmujärjestys

Tehtäväsi on selvittää, missä järjestyksessä luvut 1n1 \dots n 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 1n1 \dots n 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 n=3n = 3, yksi kelvollinen ratkaisu on laittaa luvut hakupuuhun järjestyksessä [2,3,1][2, 3, 1]. Tällöin luku 22 asetetaan puun juureksi, luku 33 tämän oikeaksi lapseksi ja luku 11 juuren vasemmaksi lapseksi. Luvut 11 ja 33 päätyvät siis syvyydelle 1. Kuitenkin esimerkiksi järjestys [1,2,3][1,2,3] ei olisi kelvollinen. Nyt luku 11 päätyy puun juureksi, 22 tämän oikeaksi lapseksi ja 33 luvun 22 oikeaksi lapseksi. Luku 33 päätyy siis syvyydelle 2, mikä on suurempi kuin minkään solmun syvyys optimaalisessa järjestyksessä.