konwertować binarne drzewo binarne drzewo poszukiwań INPLACE przy użyciu C

głosy
0

Bez użycia żadnych dodatkowych przestrzeń przekształcić binarne drzewo do Binary Search tree.I wpadł następnego algo ale to nie działa.

BTtoBST (* węzeł główny)

1.If korzenia NULL powrotu

2.else prądu = pierwiastek

3.Jeżeli (natężenie prądu> lewo> prąd) Swap (natężenie prądu> w lewo, prąd)

4.Jeżeli (natężenie prądu> prawo <prąd) Swap (natężenie prądu> rację, prąd)

5.current = natężenie prądu> w lewo

6 iść do 3 jeżeli prąd! = NULL jeszcze pójść do 4

7.current = natężenie prądu> prawo

Z góry dziękuję

PS: Widziałem ten link, ale nie było zbyt pomocne !! Konwersja drzewo binarne -> BST (zachowując oryginalny kształt drzewa)

Utwórz 29/03/2011 o 05:49
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Można zamienić węzły tym poddrzew (nie tylko zawartość węzła) jak w Drzewo AVL http://en.wikipedia.org/wiki/AVL_tree

Po prostu tak długo jak zamiana ograniczenia BST zostały naruszone, ponowne uruchomienie głęboki pierwszy wyszukiwanie od korzenia po każdej wymiany.

Odpowiedział 29/03/2011 o 08:42
źródło użytkownik

głosy
0

Przeprowadzić pocztowy zamówienie (bottom up) przechodzenie drzewa, biorąc węzły, które są odwiedzane i wkładanie ich do BST.

Oznacza „bez jakiejkolwiek dodatkowej przestrzeni” wyklucza rekursji?

Jeśli nie, to coś takiego:

# 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_bstJest to operacja sączenia; zajmuje istniejący BST i zwraca nowy z danego węzła dodanego do niego.

Dodanie węzła do liścia bstjest bezpieczne, ponieważ nigdy nie odwiedzić go ponownie, więc możemy nadpisać ITS lefti rightwskazówek.

Odpowiedział 28/03/2012 o 18:49
źródło użytkownik

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