В настоящее время я изучаю структуру данных с использованием C ++.
Я понимаю, как вы будете балансировать бинарное дерево поиска при вставке новых узлов.
Однако что, если у вас уже есть вырожденное дерево (один список ссылок), и вы хотите сбалансировать его, не создавая новое дерево?
В заключение, как бы я собрал вырожденное дерево в полное дерево, используя существующие узлы? (С использованием методов вращения)
Например, мои узлы содержат данные (9 узлов): 1, 3, 6, 9, 12, 15, 18, 21, 24
Мне нужен толчок для этого. Я не уверен, с чего начать .. Я ценю вашу помощь.
Вырожденное дерево — это просто отсортированный связанный список. Найдите средний элемент списка, удалите начало списка перед серединой и прикрепите его слева от среднего элемента. Теперь у вас есть средний элемент в качестве корня и два вырожденных дерева (связанные списки) с каждой стороны. Повторите эту процедуру рекурсивно для каждой стороны.
Других решений пока нет …