Birçok algoritma yinelemelerin hariç tutulacağını belirtir. Örneğin, MIT Algoritmaları kitabındaki örnek algoritmalar genellikle kopyaları olmayan örnekler sunar. Kopyaları uygulamak (düğümde bir liste olarak veya belirli bir yönde) oldukça önemsizdir.
(Gördüğüm) çoğu sol çocukları <= ve sağ çocukları> olarak belirtir. Pratik olarak, sağ veya sol çocukların kök düğüme eşit olmasına izin veren bir BST, yinelenen düğümlere izin verilen bir aramayı bitirmek için ekstra hesaplama adımları gerektirecektir.
Düğümün bir tarafına '=' değeri eklemek, düğümü alt öğe olarak yerleştirmek için ağacın yeniden yazılmasını gerektirdiğinden veya düğüm genel olarak yerleştirildiğinden, yinelenenleri depolamak için düğümdeki bir listeyi kullanmak en iyisidir. -çocuk, aşağıda bir noktada, arama verimliliğinin bir kısmını ortadan kaldırır.
Hatırlamanız gerekir ki, sınıf örneklerinin çoğu konsepti tasvir etmek ve sunmak için basitleştirilmiştir. Gerçek dünyadaki birçok durumda çömelmeye değmezler. Ancak, "her öğenin bir anahtarı vardır ve hiçbir iki öğenin aynı anahtarı yoktur" ifadesi, öğe düğümündeki bir listenin kullanılmasıyla ihlal edilmez.
Veri yapıları kitabınızın söylediklerine bakın!
Düzenle:
İkili Arama Ağacının Evrensel Tanımı, bir veri yapısını iki yönden birinden geçirmeye dayanan bir anahtarın saklanmasını ve aranmasını içerir. Pragmatik anlamda, eğer değer <> ise, veri yapısını iki 'yönden' geçersiniz. Yani, bu anlamda, yinelenen değerler hiç mantıklı değil.
Bu, BSP veya ikili arama bölümünden farklıdır, ancak hepsi bu kadar farklı değildir. Arama algoritması 'seyahat' için iki yönden birine sahiptir ya da yapılır (başarılı ya da değil) Bu yüzden orijinal cevabımın 'evrensel tanım' kavramını ele almadığından özür dilerim, çünkü kopyalar gerçekten farklı konu (ikili aramanın bir parçası olarak değil, başarılı bir aramadan sonra uğraştığınız bir şey)