Binary Search Trees

stemmen
5

Dit is een code te vinden op wikipedia over 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

Nu hier is een Binary Tree:

       10
    5        12
  3   8    9   14
     4 11  

Als ik ben op zoek naar 11, en ik volg het algoritme daarboven, begin ik met 10, ga ik recht op 12, en vervolgens links naar 9. En ik tot het einde van de boom zonder het vinden van 11. Maar 11 bestaat in mijn boom het is net aan de andere kant.

Kunt u uitleggen wat zijn de beperkingen in een Binary Boom voor dit algoritme om te werken aan mijn boom?

Bedankt.

De vraag is gesteld op 07/09/2010 om 06:31
bron van user
In andere talen...                            


5 antwoorden

stemmen
3

Niet te verwarren tussen de Binary Tree en Binary Search Tree. De binaire zoekboom (kortweg genoemd als BST) is een speciaal type binaire boom waarin alle knopen aan de linkerkant zijn kleiner dan of gelijk aan de bovenliggende knooppunt en alle knopen juiste groter zijn dan het bovenliggende knooppunt.

Overwegende dat het voorbeeld dat je hebt gegeven is slechts een Binary Tree en niet een Binary Search Tree. Je kunt zien dat de waarde 11 en 14 worden overgelaten aan het bovenliggende knooppunt 10 waar het onroerend goed BST schendt. Kijk hier voor Binary zoeken bomen.

antwoordde op 07/09/2010 om 06:34
bron van user

stemmen
1

U hebt de knooppunten 14 en 11 geplaatst op de verkeerde plaats. Uit de Wikipedia-artikel over BSTS :

  • De linker deelboom van een knooppunt bevat alleen nodes met sleutels minder dan sleutel van het knooppunt.
  • De rechter deelboom van een knooppunt bevat alleen nodes met sleutels die groter is dan sleutel van het knooppunt.
  • Zowel de links en rechts substructuren moeten ook binary search bomen.

Zoals u kunt zien, zowel 14 en 11 groter zijn dan 8.

antwoordde op 07/09/2010 om 06:35
bron van user

stemmen
3

De boom gepresenteerd in geen BST. 11 en 14 zouden zijn nooit geplaatst aan de linkerkant van 10, en dat is de reden waarom het algoritme daar niet zoeken. 9 is misplaatst.

Insertion volgens Wikipedia:

Insertion begint als een zoektocht zou beginnen; indien de wortel is niet gelijk aan de waarde, zoeken we links of rechts substructuren als voorheen. Uiteindelijk zullen we een externe knooppunt bereiken en voeg de waarde als rechter of linker kind, afhankelijk van de waarde van het knooppunt. Met andere woorden, bekijken we de wortel en recursief plaats de nieuwe knooppunt naar links substructuur indien de nieuwe waarde lager is dan de wortel of de rechter deelboom als de nieuwe waarde groter is dan of gelijk is aan de wortel.

Je kunt zien dat een Binary Tree is een BST als het deze eigenschappen (ook uit Wikipedia):

  1. De linker deelboom van een knooppunt bevat alleen nodes met sleutels minder dan sleutel van het knooppunt.
  2. De rechter deelboom van een knooppunt bevat alleen nodes met sleutels die groter is dan sleutel van het knooppunt.
  3. Zowel de links en rechts substructuren moeten ook binary search bomen.
antwoordde op 07/09/2010 om 06:35
bron van user

stemmen
10

Het is gewoon omdat uw boom is niet een binaire zoekboom: het is niet goed besteld. De BST is gebouwd, zoals beschreven in het algoritme eigenlijk. Bijvoorbeeld in de boom: het knooppunt '9' niet op de juiste plaats want 9 <10 moet het onder de linker tak van rootnode '10'. Hetzelfde geldt voor '14' en '11' die moet worden op de rechtertak.

bijvoorbeeld een BST kon sth als volgt uit:

    10
  5    11
3   8    12
          14
antwoordde op 07/09/2010 om 06:37
bron van user

stemmen
1

uw boom is niet een binaire zoekboom

antwoordde op 07/09/2010 om 06:58
bron van user

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