Как бы я сбалансировал вырожденное дерево? C ++ Структура данных

В настоящее время я изучаю структуру данных с использованием C ++.
Я понимаю, как вы будете балансировать бинарное дерево поиска при вставке новых узлов.

Однако что, если у вас уже есть вырожденное дерево (один список ссылок), и вы хотите сбалансировать его, не создавая новое дерево?
В заключение, как бы я собрал вырожденное дерево в полное дерево, используя существующие узлы? (С использованием методов вращения)

Например, мои узлы содержат данные (9 узлов): 1, 3, 6, 9, 12, 15, 18, 21, 24

Мне нужен толчок для этого. Я не уверен, с чего начать .. Я ценю вашу помощь.

-1

Решение

Вырожденное дерево — это просто отсортированный связанный список. Найдите средний элемент списка, удалите начало списка перед серединой и прикрепите его слева от среднего элемента. Теперь у вас есть средний элемент в качестве корня и два вырожденных дерева (связанные списки) с каждой стороны. Повторите эту процедуру рекурсивно для каждой стороны.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]