Учитывая последовательность чисел, я хочу вставить числа в сбалансированное двоичное дерево таким образом, чтобы, когда я делаю обход по порядку в дереве, он возвращал мне последовательность обратно.
Как создать метод вставки, соответствующий этому требованию?
Помните, что дерево должно быть сбалансированным, поэтому не существует абсолютно тривиального решения. Я пытался сделать это с помощью модифицированной версии дерева AVL, но я не уверен, что это сработает.
Я также хотел бы иметь возможность реализовать операцию удаления. Удалить следует удалить элемент в i-й позиции в списке.
Редактировать: уточнение:
Я хочу иметь:
Insert (i, e), которая вставляет один элемент e прямо перед i-м элементом в последовательности.
Delete (i), который удаляет i-й элемент последовательности.
Если я вставлю (0, 5), вставлю (0, 4), вставлю (0, 7), то моя сохраненная последовательность теперь будет 7, 4, 5, а обход по двоичному дереву должен дать мне 7, 4, 5.
Если я удаляю (1), то обход по бинарному дереву должен дать мне 7, 5. Как вы можете видеть, порядок последовательности сохраняется после удаления i-го элемента последовательности с i = 1 в этом случае (как Я проиндексировал мою последовательность от 0).