Mój bst musi być w stanie poradzić sobie ze zduplikowanych wpisów. Czy ktoś ma jakieś strategie, jak go o to, że nie wymaga nadmiernych ilości kodu? Myślałem o konsekwentnie dodanie duplikaty w prawo, ale potem, że będzie bałagan kolejność BST. na przykład, co się dzieje, gdy duplikat ma dwoje dzieci, którzy z kolei mają dwoje dzieci ?. włożeniem duplikat jest na tyle łatwe, ale to, co jest do zrobienia z węzłem zastąpił?
radzenia sobie z duplikatów w BST
Można zrobić węzły wyszukiwania binarnego drzewa w połączonych listach.
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>();
}
Tutaj treeNode.itemszawsze jest niepusty lista, tak że item1.compareTo(item2) == 0dla każdego item1i item2w treeNode.items.
Aby wstawić duplikat elementu, by znaleźć odpowiedni TreeNodeobiekt i dodać nowy element do items.
Logika znalezienie elementów jest prawie taka sama jak przedtem, tyle że po znalezieniu odpowiedniego TreeNodeobiektu trzeba chodzić połączonej listy.
Tak długo, jak nie jest to samo balansowanie BST, nie widzę problemu z wprowadzenia równych węzły albo na lewo lub prawo od węzła, który jest równy do nich.
Edit (po uwagą simonn użytkownika):
Jeśli „duplikat węzeł” posiada już 2 dzieci, a potem po prostu włóż „nowy duplikat węzeł” po lewej stronie i niech lewa dziecko „starej duplikatu węzła” stać lewa dziecko „nowego duplikatu węzła”.
Pozwól mi wyjaśnić na przykładzie. Drzewo przed włożeniem duplikat:
4'
/ \
2 5
/ \
1 3
A teraz element 4''w brzmieniu:
4'
/ \
4'' 5
/
2
/ \
1 3
Dopóki drzewo nie jest równoważenie samo powinno być w porządku.
Zastanawiam się, czy rzeczywiście trzeba przechowywać zduplikowane wpisy jako oddzielne węzły? Czy dodanie zmiennej licznika do węzła wystarczy? W ten sposób, jeśli przemierzać drzewo wiedziałbyś liczbę zduplikowane wpisy i nadal zachować kolejność.













