Вы можете превратить узлы двоичного дерева поиска в связанные списки.
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>();
}
Здесь treeNode.items
- это всегда непустой список, такой что item1.compareTo(item2) == 0
для каждого item1
и item2
в treeNode.items
.
Чтобы вставить дубликат элемента, вы найдете соответствующий объект TreeNode
и добавите новый элемент в items
.
Логика поиска элементов почти такая же, как и раньше, за исключением того, что, как только вы найдете соответствующий объект TreeNode
, вы должны пройтись по связанному списку.