Как вы можете преобразовать двоичное дерево в двоичное дерево поиска с дополнительным пространством O (1)?Двоичное дерево в двоичное дерево поиска (BST)
ответ
Преобразование неупорядоченного двоичного дерева в упорядоченное двоичное дерево поиска тривиально, но немного сложнее сделать это быстро.
Вот наивная реализация, которая должна удовлетворять вашим критериям, я не буду описывать действительные шаги, которые вы должны выполнить, только общий алгоритм.
- Grab случайный лист узел из существующего дерева
- Unlink узла листа из существующего дерева
- Сделать Узел корень вашего нового бинарного дерева поиска
- захватить другой случайный лист узел с вашим существующее дерево
- Unlink этого узла из существующего дерева
- Найдите правильное место для, и связать узел, в новое бинарное дерево поиска
- Повторите шаг 4-6 до тех пор, пока исходное дерево не станет пустым
Вам потребуется лишь несколько переменных, таких как родительский элемент листового узла, который вы отключаете (если узлы не имеют родительских связей), корневой узел нового дерева и пару временных переменных, все в пределах ваших критериев O (1).
Это не приведет к созданию оптимального двоичного дерева поиска. Для этого вам нужно либо отсортировать узлы перед их добавлением, либо добавить их в правильном порядке, либо использовать балансировочное двоичное дерево поиска, например, красно-черное дерево или дерево воспроизведения.
Преобразование двоичного дерева в двусвязном list- можно сделать Inplace в O (N) Затем сортировать его с помощью сортировки слияния, NlogN Преобразовать список обратно в дерево - О (п)
Простого NlogN решение.
- 1. двоичное дерево поиска bst
- 2. Двоичное дерево/двоичное дерево поиска
- 3. Двоичное дерево поиска поиска
- 4. Двоичное дерево поиска поиска:
- 5. Двоичное дерево поиска Haskell
- 6. Двоичное дерево поиска - PrintInOrder();
- 7. Двоичное дерево поиска C++
- 8. Двоичное дерево поиска
- 9. Двоичное дерево поиска, высота
- 10. Двоичное дерево поиска - отсортировано?
- 11. Двоичное дерево поиска строк
- 12. Вставка в двоичное дерево поиска
- 13. Двоичное дерево поиска - Java
- 14. Как сбалансировать двоичное дерево поиска балансировки (BST)?
- 15. Двоичное дерево поиска delete
- 16. Двоичное дерево поиска со списками
- 17. Двоичное дерево поиска в схеме
- 18. Двоичное дерево поиска в Java
- 19. Двоичное дерево поиска - добавление листьев
- 20. Двоичное дерево поиска содержит функцию
- 21. Двоичное дерево поиска рекурсивного деструктора
- 22. Двоичное дерево поиска C++ (родители)
- 23. Двоичное дерево поиска с формами
- 24. Двоичное дерево поиска остается пустым?
- 25. Двоичное дерево поиска Пояснение
- 26. Двоичное дерево поиска? Алгоритм
- 27. Двоичное дерево поиска слева.
- 28. Двоичное дерево поиска - вставка
- 29. Почему двоичное дерево поиска?
- 30. C++ двоичное дерево поиска
Я предполагаю, что ваше исходное двоичное дерево не упорядочено тогда? –
Является ли двоичное дерево отсортированным? –
Я предполагаю, что это не так, иначе оно уже будет соответствовать определению BST. –