конвертировать бинарное дерево в бинарном дереве поиска INPLACE с использованием C

голоса
0

Без использования какого-либо дополнительных пространство преобразования двоичного дерева в двоичном поиске tree.I придумали следующий, но это алгоритм не работает.

BTtoBST (узел * корень)

1.Если корня NULL возврата

2.else ток = корень

3.Если (current-> левый> ток) Своп (current-> слева, ток)

4.Если (current-> вправо <тока) Своп (current-> правый, ток)

5.current = current-> левый

6 перейти к этапу 3, если ток! = NULL то переход на 4

7.current = current-> правый

заранее спасибо

PS: Я видел эту ссылку , но не очень помогает !! Преобразование двоичного дерева -> BST (сохраняя первоначальную форму дерева)

Задан 29/03/2011 в 05:49
источник пользователем
На других языках...                            


2 ответов

голоса
1

Вы можете поменять местами узлы , включая поддеревьев (не только содержание узла) , как в дереве AVL http://en.wikipedia.org/wiki/AVL_tree

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

Ответил 29/03/2011 в 08:42
источник пользователем

голоса
0

Выполните пост-заказ (снизу вверх) обход дерева, принимая узлы, которые посещают и вставив их в BST.

Есть ли «без какого-либо дополнительного пространства» исключает рекурсию?

Если нет, то что-то вроде:

# top level call passes null for bst
bt_to_bst (root, bst)
  # nothing to add to bst; just return it
  if null(root) -> return bst
  # if this is a leaf node, stick it into the BST
  if null(root->left) && null(root->right)
    return bst_insert(bst, root)
  # otherwise add all of left subtree into the bst and then the right tree
  bst = bt_to_bst (root->left, bst);
  return bt_to_bst (root->right, bst);

bt_to_bstявляется операцией фильтрации; он принимает существующий BST и возвращает новый с данным узлом, добавленным к нему.

Добавление узла листа к bstбезопасно , потому что мы никогда не будем посещать его снова, так что мы можем перезапишем его leftи rightуказатели.

Ответил 28/03/2012 в 18:49
источник пользователем

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