Benzersiz, sıralı bir tamsayı listesi verildiğinde, özyineleme kullanmadan dizi olarak temsil edilen dengeli bir ikili arama ağacı oluşturun.
Örneğin:
func( [1,2,3,5,8,13,21] ) => [5,2,13,1,3,8,21]
Başlamadan önce, bir ipucu: bu sorunu bir ton basitleştirebiliriz, böylece giriş tam sayılarını (veya bu konu için karşılaştırılabilir herhangi bir nesneyi!) Düşünmek zorunda kalmazız.
Giriş listesinin zaten sıralandığını biliyorsanız, içeriği önemsizdir. Sadece orijinal diziye endeksler açısından düşünebiliriz.
Girdi dizisinin dahili bir temsili şu şekilde olur:
func( [0,1,2,3,4,5,6] ) => [3,1,5,0,2,4,6]
Bu, karşılaştırılabilir nesnelerle uğraşmak zorunda olan bir şey yazmaktan ziyade, sadece [0, n) aralığından sonuçtaki diziye eşlenen bir işlev yazmamız gerekir. Yeni siparişi aldıktan sonra, dönüş dizisini oluşturmak için eşlemeyi girişteki değerlere geri uygulayabiliriz.
Geçerli çözümler:
- Sıfır elemanlı bir diziyi kabul edin ve boş bir dizi döndürün.
- N uzunluğunda bir tamsayı dizisini kabul edin ve bir tamsayı dizisi döndürün
- N ile 2 eksi 1 arasındaki bir sonraki en yüksek güç arasındaki uzunluk .
- Kök düğümün 0 konumunda olduğu ve yüksekliğin log (n) 'e eşit olduğu bir BST'yi temsil eden dizi, burada 0 eksik bir düğümü (veya
null
diliniz izin veriyorsa benzer bir değeri ) temsil eder . Boş düğümler, varsa, yalnızca ağacın sonunda olmalıdır (ör.[2,1,0]
)
Giriş tamsayı dizisi aşağıdaki garantilere sahiptir:
- Değerler, sıfırdan büyük 32 bit işaretli tamsayılardır.
- Değerler benzersizdir.
- Değerler sıfır konumundan artan sıradadır.
- Değerler seyrek olabilir (yani, birbirine bitişik olmayabilir).
Ascii karakter sayısına göre en kısa kod kazanır, ancak aynı zamanda herhangi bir dil için zarif çözümler görmekle de ilgileniyorum.
Test senaryoları
İhtiva eden basit diziler için çıkışlar 1
için n
çeşitli için n
. Yukarıda tarif edildiği gibi, takip eden 0
kısımlar isteğe bağlıdır.
[]
[1]
[2,1,0]
[2,1,3]
[3,2,4,1,0,0,0]
[4,2,5,1,3,0,0]
[4,2,6,1,3,5,0]
[4,2,6,1,3,5,7]
[5,3,7,2,4,6,8,1,0,0,0,0,0,0,0]
[6,4,8,2,5,7,9,1,3,0,0,0,0,0,0]
[7,4,9,2,6,8,10,1,3,5,0,0,0,0,0]
[8,4,10,2,6,9,11,1,3,5,7,0,0,0,0]
[8,4,11,2,6,10,12,1,3,5,7,9,0,0,0]
[8,4,12,2,6,10,13,1,3,5,7,9,11,0,0]
[8,4,12,2,6,10,14,1,3,5,7,9,11,13,0]
[8,4,12,2,6,10,14,1,3,5,7,9,11,13,15]