Binary alberi di ricerca

voti
5

Questo è un codice trovato su wikipedia in materia di 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

Ora qui è un albero binario:

       10
    5        12
  3   8    9   14
     4 11  

Se io sono alla ricerca di 11, e seguo l'algoritmo lassù, comincio con 10, vado a destra a 12, e poi a sinistra a 9. E raggiungo la fine della struttura senza trovare 11. Ma 11 Esiste in mio albero , è solo sul lato opposto.

Si può spiegare quali sono le restrizioni in un albero binario di questo algoritmo per lavorare sul mio albero?

Grazie.

È pubblicato 07/09/2010 alle 06:31
fonte dall'utente
In altre lingue...                            


5 risposte

voti
3

Non confondere tra albero binario e Search Tree. L'albero di ricerca binaria (in breve chiamato come BST) è un tipo speciale di albero binario in cui tutti i nodi a sinistra sono inferiori o uguali al nodo genitore e tutti i nodi di destra sono superiori al nodo genitore.

Mentre l'esempio che hai dato è solo un albero binario e non Binary Search Tree. Si può vedere che il valore di 11 e 14 sono lasciati al nodo padre 10 che viola la proprietà BST. Date un'occhiata qui per alberi binari di ricerca.

Risposto il 07/09/2010 a 06:34
fonte dall'utente

voti
1

Hai messo i nodi 14 e 11 nel posto sbagliato. Dalla alle voci di Wikipedia BST :

  • Sottoalbero sinistro di un nodo contiene solo nodi con chiavi minori chiave del nodo.
  • Sottoalbero destro di un nodo contiene solo nodi con chiavi superiori chiave del nodo.
  • Sia la sinistra e sottostrutture destra devono essere anche alberi binari di ricerca.

Come si può vedere, sia 14 e 11 sono superiore a 8.

Risposto il 07/09/2010 a 06:35
fonte dall'utente

voti
3

L'albero si presentato in non un BST. 11 e 14 non sarebbe mai stata inserita a sinistra di 10, ed è per questo l'algoritmo non cerca lì. 9 è anche fuori luogo.

Inserimento secondo Wikipedia:

Inserimento inizia come una ricerca avrebbe cominciato; se la radice non è uguale al valore, cerchiamo le sottostrutture a sinistra oa destra come prima. Alla fine, si raggiungerà un nodo esterno ed aggiungere il valore come suo figlio destro o sinistro, a seconda del valore del nodo. In altre parole, esaminiamo la radice di inserimento e ricorsivamente il nuovo nodo al sottoalbero sinistra se il nuovo valore è inferiore alla radice, o sottoalbero destro se il nuovo valore è maggiore o uguale alla radice.

Si può dire che un albero binario è un BST se ha queste proprietà (anche da Wikipedia):

  1. Sottoalbero sinistro di un nodo contiene solo nodi con chiavi minori chiave del nodo.
  2. Sottoalbero destro di un nodo contiene solo nodi con chiavi superiori chiave del nodo.
  3. Sia la sinistra e sottostrutture destra devono essere anche alberi binari di ricerca.
Risposto il 07/09/2010 a 06:35
fonte dall'utente

voti
10

E 'solo perché il vostro albero non è un albero binario di ricerca: non è ordinato in modo corretto. La BST è costruito come descritto nella algoritmo di realtà. Per esempio nell'albero: il nodo '9' non è nella posizione giusta perché come 9 <10 dovrebbe essere sotto il ramo sinistro del nodo radice '10'. Lo stesso vale per '14' e '11' che dovrebbe essere sul ramo destro.

per esempio un BST potrebbe STH come questo:

    10
  5    11
3   8    12
          14
Risposto il 07/09/2010 a 06:37
fonte dall'utente

voti
1

l'albero non è un albero binario di ricerca

Risposto il 07/09/2010 a 06:58
fonte dall'utente

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