Binarne drzewo poszukiwań

głosy
5

To jest jakiś kod znaleźć na wikipedii odnośnie BST:

# 'node' refers to the parent-node in this case
 def search_binary_tree(node, key):
     if node is None:
         return None  # key not found
     if key < node.key:
         return search_binary_tree(node.leftChild, key)
     elif key > node.key:
         return search_binary_tree(node.rightChild, key)
     else:  # key is equal to node key
         return node.value  # found key

Teraz tutaj jest drzewo binarne:

       10
    5        12
  3   8    9   14
     4 11  

Jeśli szukam 11 i śledzę algorytm tam, zacznę z 10, idę w prawo do 12, a następnie w lewo do 9. I dotrzeć do końca drzewa bez znalezienia 11. Ale 11 istnieje w moim drzewie , to jest po drugiej stronie.

Czy może Pan wyjaśnić, jakie są ograniczenia w binarne drzewo dla tego algorytmu do pracy na moim drzewie?

Dzięki.

Utwórz 07/09/2010 o 06:31
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
3

Nie należy mylić między binarne drzewo i binarne drzewo poszukiwań. Wyszukiwanie binarne drzewo (w skrócie nazywane jako BST) to specjalny rodzaj drzewa binarnego, gdzie wszystkie węzły po lewej stronie są mniejsze niż lub równe do węzła nadrzędnego i wszystkie węzły są większe prawo niż węzła nadrzędnego.

Natomiast przykład dałeś jest tylko drzewo binarne, a nie binarne drzewo poszukiwań. Widać, że wartość 11 i 14 są pozostawione do węzła nadrzędnego 10, która narusza własność BST. Spójrz tutaj dla binarne drzewo poszukiwań.

Odpowiedział 07/09/2010 o 06:34
źródło użytkownik

głosy
1

Zostały umieszczone w węzłach 14 i 11 w niewłaściwym miejscu. Z artykułu z Wikipedii na BSTS :

  • Lewe poddrzewo węzła zawiera tylko węzły z klawiszy mniej niż klucz węzła.
  • Prawo poddrzewo węzła zawiera tylko węzły z kluczy większych niż klucz węzła.
  • Zarówno lewy i prawy poddrzewa musi być także binarne drzewo poszukiwań.

Jak widać, zarówno 14 i 11 są większe niż 8.

Odpowiedział 07/09/2010 o 06:35
źródło użytkownik

głosy
3

Drzewo ty przedstawiony w a nie BST. 11 i 14 nigdy nie zostały włożone do lewej 10, a to dlatego algorytm nie tam szukać. 9 jest również nie na miejscu.

Wstawiania według Wikipedii:

Wstawiania zaczyna jako poszukiwanie by rozpocząć; jeśli korzeń nie jest równa wartości, jak my przed szukać lewego lub prawego poddrzewa. W końcu dojdziemy do węzła zewnętrznego i dodać wartość jako jego prawej lub lewej stronie dziecka, w zależności od wartości węzła. Innymi słowy, badamy korzeń i rekurencyjnie wstawić nowy węzeł na lewym poddrzewie jeśli nowa wartość jest mniejsza niż korzenia lub prawego poddrzewa jeżeli nowa wartość jest większa lub równa korzenia.

Można powiedzieć, że Binary Tree jest BST jeśli ma te właściwości (również z Wikipedii):

  1. Lewe poddrzewo węzła zawiera tylko węzły z klawiszy mniej niż klucz węzła.
  2. Prawo poddrzewo węzła zawiera tylko węzły z kluczy większych niż klucz węzła.
  3. Zarówno lewy i prawy poddrzewa musi być także binarne drzewo poszukiwań.
Odpowiedział 07/09/2010 o 06:35
źródło użytkownik

głosy
10

To tylko dlatego, że drzewo nie jest wyszukiwanie binarne drzewo: nie jest prawidłowo uporządkowane. BST jest zbudowany w sposób opisany w algorytmie faktycznie. Na przykład w drzewie: węzeł „9” nie jest w odpowiednim położeniu, ponieważ jako 9 <10 powinno być pod lewym gałęzi węzła głównego „10”. Same dla „14” i „11”, który powinien znajdować się po prawej gałęzi.

na przykład BST mogłaby sth tak:

    10
  5    11
3   8    12
          14
Odpowiedział 07/09/2010 o 06:37
źródło użytkownik

głosy
1

drzewo nie jest wyszukiwanie binarne drzewo

Odpowiedział 07/09/2010 o 06:58
źródło użytkownik

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