Benim BST yinelenen girdileri ile baş edebilmek için vardır. Herkes aşırı miktarda kod gerektirmeyen bu konuda nasıl herhangi stratejileri var mı? Ben sürekli sağa çiftleri ekleyerek düşündüm ama BST emri o irade pisliği. yinelenen sırayla iki çocuk sahibi iki çocuk olduğunda örneğin ne olur ?. yinelenen ekleme yeterince kolay, ama yerini düğüm ile yapılması gereken nedir?
Bir şey eksik çiftleri ile uğraşan
Bağlantılı listeler halinde ikili arama ağacının düğümleri yapabiliriz.
class Data implements Comparable<Data>
{
// These are the data elements in your binary search tree
}
class TreeNode
{
TreeNode left; // elements less than current node, or null
TreeNode right; // elements greater than current node, or null
List<Data> items = new LinkedList<Data>();
}
Burada, treeNode.itemsboş olmayan bir liste olduğunu, her zaman böyle olduğu item1.compareTo(item2) == 0her için item1ve item2de treeNode.items.
Yinelenen bir öğe eklemek için, ilgili bulacağını TreeNodenesne ve yeni bir öğe eklemek items.
Sizin alakalı bir kez dışında daha önce olduğu gibi unsurları bulma mantığı hemen hemen aynıdır TreeNodesen bağlantılı liste yürütmek zorunda nesneyi.
Sürece BST dengeleme kendi kendine değil, ben onlara eşittir düğümün sol veya sağında ya eşit düğümleri koyarak ile ilgili bir sorun görmüyorum.
Düzen (simonn beyanatından sonra):
Söz konusu "yinelenen düğüm" zaten 2 çocuk varsa, soldaki "Yeni yinelenen düğümü" insert ve "eski yinelenen düğümü" sol çocuk "yeni yinelenen düğüm" sol çocuk haline sağlar.
Bir örnekle açıklayayım. yinelenen takmadan önce ağacı:
4'
/ \
2 5
/ \
1 3
Ve şimdi eleman 4''eklenir:
4'
/ \
4'' 5
/
2
/ \
1 3
Sürece ağaç kendini dengeleme olmadığından, iyi olmalıdır.
aslında ayrı düğüm gibi yinelenen girdileri saklamak gerekir acaba? yeterli sizin Düğüm bir karşı değişken ekleyerek misiniz? Bu yolla ağaç travers eğer yinelenen giriş sayısını bilmek ve hala düzeni korumak olacaktır.













