Binarne drzewo do binarne drzewo poszukiwań (BST)

głosy
1

Jak można przekonwertować do binarne drzewo binarne drzewo poszukiwań z O (1) dodatkowej przestrzeni?

Utwórz 17/05/2010 o 10:56
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
6

Konwersja nieuporządkowaną drzewo binarne w uporządkowany binarne drzewo poszukiwań jest trywialne, ale nieco trudniej zrobić szybko.

Oto naiwna implementacja, które powinny spełniać te kryteria, nie będę opisywać rzeczywiste kroki do podjęcia, tylko ogólny algorytm.

  1. Chwycić losowy węzeł liścia z istniejącym drzewie
  2. Rozłączyć węzeł liścia z istniejącym drzewie
  3. Dokonaj węzła korzenia nowej binarne drzewo poszukiwań
  4. Chwycić kolejną losową węzeł liścia z istniejącym drzewie
  5. Odłączyć ten węzeł z istniejącego drzewa
  6. Znajdź odpowiednie miejsce dla, i połączyć węzeł, do nowego binarne drzewo poszukiwań
  7. Powtórz czynność 4-6 dopóki oryginalnego drzewa jest pusty

należy wymagać tylko kilka zmiennych, jak rodzica węzła liścia jesteś rozłączanie (chyba węzłów ma rodzic-linki), węzeł główny nowego drzewa i kilka zmiennych tymczasowych, wszystko w swoim czasie O (1 ) kryteria przestrzeni.

To nie będzie produkować optymalną binarne drzewo poszukiwań. Do tego trzeba albo posortować węzły przed dodaniem ich i dodając je w odpowiedniej kolejności, lub użyć balansowaniu binarne drzewo poszukiwań, jak drzewo czerwono-czarne lub pochylenie drzewa.

Odpowiedział 17/05/2010 o 11:24
źródło użytkownik

głosy
-1

Konwersja binarne drzewo do podwójnie połączonej listy- można zrobić inplace w O (N) Następnie połączyć go za pomocą sortowania sortowania nlogn Konwersja listy z powrotem do drzewa - O (n)

Proste nlogn rozwiązanie.

Odpowiedział 18/02/2014 o 20:52
źródło użytkownik

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