Binary дерево бинарного дерева поиска (BST)

голоса
1

Как вы можете преобразовать двоичное дерево в бинарное дерево поиска с O (1) дополнительное место?

Задан 17/05/2010 в 10:56
источник пользователем
На других языках...                            


2 ответов

голоса
6

Преобразование неупорядоченного бинарного дерева в упорядоченном бинарное дерево поиска тривиально, но немного более трудно сделать быстро.

Вот наивная реализация, которая должна удовлетворять ваши критерии, я не буду описывать реальные шаги, чтобы взять, только общий алгоритм.

  1. Захватите случайный узел листа из существующего дерева
  2. Unlink узел листа из существующего дерева
  3. Сделайте узел корень вашего нового бинарного дерева поиска
  4. Возьмите другой случайный узел листа из существующего дерева
  5. Unlink этого узла из существующего дерева
  6. Найдите правильное место для, и связать узел, в новое бинарное дерево поиска
  7. Повторите шаг 4-6 до исходного дерева пусто

Вы должны требовать лишь несколько переменных, как родительский узла листа вы Отмену связей (если узлы имеют родительскую-ссылку), корневой узел нового дерева, и несколько временных переменные, все в пределах вашего O (1 ) критерии пространства.

Это не будет производить оптимальное бинарное дерево поиска. Для этого вам необходимо либо отсортировать узлы, прежде чем добавлять их, и добавить их в правильном порядке, или использовать балансировку дерево двоичного поиска, как красно-черное дерево или скошенное дерево.

Ответил 17/05/2010 в 11:24
источник пользователем

голоса
-1

Преобразование двоичного дерева в двусвязном list- можно сделать Inplace в O (N) Тогда разбирайтесь с помощью сортировки слияния, NlogN Преобразовать список обратно в дерево - O (п)

Простой NlogN решение.

Ответил 18/02/2014 в 20:52
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more