1 ile 31 arasında bir sayıya sahibim ve bu sayıların en küçük derinliğe sahip bir ikili arama ağacı oluşturması gerekiyor. 31/2'yi bölmeyi ve 16 kökü yapmayı düşünüyordum. Bundan sonra 16/2 bölündü ve 8 tane ekledikten sonra, bu işe yaramaz gibi görünüyor. Ağaçların mümkün olan en küçük derinliğe sahip olabilmesi için sayıların hangi sırayla yerleştirileceğini bilmek için bir algoritma var mı?En küçük derinliğe sahip bir ikili arama ağacı oluşturma
2
A
cevap
3
Sayı 1–31, 31 sayılarınız varsa, kökün solunda 15 ve sağda 15 sayı olmasını istersiniz.
Yani kök 16'dır (31/2 değil, 31/2 + 1).
Aynı prosedürün yinelenmesiyle, sol alt ağacın 15 öğesi vardır, böylece bu alt ağacın her bir tarafında yedi sayı olmasını istersiniz.
Böylece sol alt ağacın kökü 8'dir (15/2 + 1; burada bir desen var).
Benzer bir hesaplama, sağ alt ağacın kökü verir.
Ve benzeri.
Buna daha iyi uyan ağaç dengelemeye izin veren algoritmalar vardır. Bu şekilde ekleme sırasının önemi yoktur, ancak ağaç en azdır. [AVL] (https://en.wikipedia.org/wiki/AVL_tree) yakındır, Dahili Yol İndirimleri Ağaçlar daha da iyidir (minimum garanti) ancak biraz daha zaman alabilir. – Obicere
Çoğunlukla alakasız: 31/2 kök için 15, 16 değil. –