Я хочу, чтобы моя avl-tree
поддерживала дубликаты ключей, но есть проблема с поведением по умолчанию binary search tree
с дубликатами, из-за которого при повороте узлы с одинаковым ключом могли быть слева и справа от родителя.
Например, при добавлении трех узлов с ключом A дерево будет вращаться примерно так:
A
/ \
A A
Таким образом, получение всех записей с этим ключом будетпроблема ... и поиск в обоих направлениях не годится.
Решение, о котором я подумал, заключается в том, чтобы каждый узел хранил массив дубликатов, поэтому при добавлении нового элемента, который уже существует, будет просто добавление новогоудаление элемента с массивом, удаление элемента с ключом приведет к удалению всего узла, а поиск всех элементов с ключом вернет этот массив.
Существуют ли другие методы для обработки дубликатов?
Вставкаitem принимает ключ и значение .. поэтому мне нужно сохранить значения в порядке, чтобы они возвращались методом findAll с определенным методом ключа.