Binary Keresés Fák

szavazat
5

Ez valami kód található wikipedia kapcsolatos 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

Most itt van egy bináris fa:

       10
    5        12
  3   8    9   14
     4 11  

Ha keresem 11, és kövesse az algoritmust ott, elkezdek 10, megyek jobbra 12, majd elhagyta a 9. És én eléri a végén a fa megállapítása nélkül 11. De 11 létezik fám , ez csak a másik oldalon.

Meg tudnád magyarázni milyen korlátozásokat bináris fában erre algoritmust, hogy az én fa?

Kösz.

A kérdést 07/09/2010 06:31
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
3

Ne tévesszük össze a bináris fa és bináris keresési fa. A bináris keresési fa (röviden nevezik BST) egy speciális típusú bináris fa, ahol az összes csomópontot, a bal oldalon vannak kisebb vagy egyenlő, mint a szülő csomópont és az összes csomópont jobb nagyobbak, mint a szülő csomópont.

Mivel a példa adtál csak egy bináris fa, és nem bináris kereső fába. Láthatjuk, hogy az érték 11 és 14 balra a szülőcsomópont 10, amely sérti a BST tulajdon. Nézzen ide a bináris keresés fák.

Válaszolt 07/09/2010 06:34
a forrás felhasználó

szavazat
1

Elhelyezte a csomópontok 14 és 11 rossz helyen. Tól a Wikipedia cikket BSTs :

  • A bal részfa egy csomópont tartalmaz egyetlen csomópont kulcsokkal kevesebb, mint a csomópont kulcsot.
  • A jobb részfa egy csomópont tartalmaz egyetlen csomópont kulcsokkal nagyobb, mint a csomópont kulcsot.
  • Mind a bal és a jobb részfa is kell bináris keresés fák.

Mint látható, mind a 14 és 11 nagyobb, mint 8.

Válaszolt 07/09/2010 06:35
a forrás felhasználó

szavazat
3

A fa akkor bemutatott nem BST. 11. és 14. volna soha nem egészül ki a bal oldalon a 10, és ezért az algoritmus nem keres ott. 9 is megállja a helyét.

Beillesztés Wikipedia szerint:

Beillesztés kezdődik, mint egy keresés elkezdődik; ha a gyökér nem egyenlő az érték, kutatjuk a bal vagy a jobb részfa, mint korábban. Végül eljutunk egy külső csomópont és az értéknek, mint a jobb vagy bal gyermek, attól függően, hogy a csomópont értékét. Más szóval, megvizsgáljuk a gyökér és a rekurzív helyezze be az új csomópont a bal oldali részfa, ha az új érték kisebb, mint a gyökér, vagy a jobb részfa, ha az új érték nagyobb vagy egyenlő, mint a gyökér.

Azt lehet mondani, hogy egy bináris fa egy BST ha rendelkezik ezekkel a tulajdonságokkal (szintén Wikipedia):

  1. A bal részfa egy csomópont tartalmaz egyetlen csomópont kulcsokkal kevesebb, mint a csomópont kulcsot.
  2. A jobb részfa egy csomópont tartalmaz egyetlen csomópont kulcsokkal nagyobb, mint a csomópont kulcsot.
  3. Mind a bal és a jobb részfa is kell bináris keresés fák.
Válaszolt 07/09/2010 06:35
a forrás felhasználó

szavazat
10

Ez csak azért, mert a fa nem egy bináris keresési fa: nem rendelhető helyesen. A BST építeni leírt algoritmus révén. Például a fa: a csomópont „9” nem a megfelelő helyzetben, mert a 9 <10 alatt kell lennie a bal oldali ága a gyökér csomópont „10”. Ugyanaz a „14” és „11”, ami kell a jobb ág.

Például a BST is sth, mint ez:

    10
  5    11
3   8    12
          14
Válaszolt 07/09/2010 06:37
a forrás felhasználó

szavazat
1

A fa nem egy bináris keresési fa

Válaszolt 07/09/2010 06:58
a forrás felhasználó

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