Binární vyhledávací stromy

hlasů
5

To je k dispozici na wikipedii ohledně BST nějaký kód:

# '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

Tady je binární strom:

       10
    5        12
  3   8    9   14
     4 11  

Když jsem hledal 11 a sleduji algoritmus tam nahoře, začnu s 10, jdu hned na 12, a pak odešel do 9. A já dostat se na konec stromu bez nálezu 11. Ale 11 existuje v mém stromě je to jen na druhé straně.

Můžete mi prosím vysvětlit, jaké jsou omezení v binární strom pro tento algoritmus pro práci na mém stromě?

Dík.

Položena 07/09/2010 v 06:31
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
3

Nepleťte mezi binárního stromu a strom binárního vyhledávání. Binární vyhledávací strom (zkráceně označován jako BST) je speciální typ binárního stromu, kde všechny uzly na levé straně jsou menší než nebo rovnající se nadřazeného uzlu a všechny uzly vpravo jsou větší než původní uzel.

Vzhledem k tomu, například, že jste danou je jen binární strom a nikoli binární vyhledávací strom. Můžete vidět, že hodnota 11 a 14 jsou ponechány nadřazeného uzlu 10, který porušuje vlastnost BST. Podívejte se zde na binární vyhledávací stromy.

Odpovězeno 07/09/2010 v 06:34
zdroj uživatelem

hlasů
1

Jste umístili v uzlech 14 a 11 na špatném místě. Z článku Wikipedie o BSTs :

  • Levý podstrom uzlu obsahuje pouze uzly s klíči méně než klíče uzlu.
  • Správná podstrom uzlu obsahuje pouze uzly s klíči větší než klíč uzlu.
  • Oba levý a pravý podstromy musí být také binární vyhledávací stromy.

Jak můžete vidět, jak 14 a 11 jsou větší než 8.

Odpovězeno 07/09/2010 v 06:35
zdroj uživatelem

hlasů
3

Strom jste prezentovány nikoli BST. 11 a 14 z nich by nikdy nebyly vloženy do levé části 10, a to je důvod, proč algoritmus není tam hledat. 9 je také na místě.

Vkládání podle Wikipedie:

Vložení začíná jako hledání by začít; v případě, že kořen není rovna hodnotě, jako předtím budeme hledat doleva nebo doprava podstromy. Nakonec se dostaneme externí uzel a přidat hodnotu jako pravé nebo levé dítě, v závislosti na hodnotě uzlu. Jinými slovy, se podíváme na kořen a rekurzivně vložit nový uzel na levém podstromu, pokud je nová hodnota je nižší než kořene, nebo na pravou podstromu, pokud je nová hodnota je větší než nebo rovna kořene.

Můžete říct, že binární strom je BST-li to má tyto vlastnosti (také z Wikipedie):

  1. Levý podstrom uzlu obsahuje pouze uzly s klíči méně než klíče uzlu.
  2. Správná podstrom uzlu obsahuje pouze uzly s klíči větší než klíč uzlu.
  3. Oba levý a pravý podstromy musí být také binární vyhledávací stromy.
Odpovězeno 07/09/2010 v 06:35
zdroj uživatelem

hlasů
10

Je to jen proto, že váš strom není binární vyhledávací strom: to není správně objednal. BST je postaven, jak je popsáno v algoritmu ve skutečnosti. Například ve svém stromě: uzlu ‚9‘ není na správném místě, protože jako 9 <10 by mělo být pod levou větev svého kořene ‚10‘. Totéž u ‚14‘ a ‚11‘, která by měla být na pravé větvi.

Například BST mohla tá takto:

    10
  5    11
3   8    12
          14
Odpovězeno 07/09/2010 v 06:37
zdroj uživatelem

hlasů
1

váš strom není binární vyhledávací strom

Odpovězeno 07/09/2010 v 06:58
zdroj uživatelem

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