Binære søketrær

stemmer
5

Dette er noen kode funnet på wikipedia om 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

Nå her er en Binary Tre:

       10
    5        12
  3   8    9   14
     4 11  

Hvis jeg søker etter 11, og jeg følger algoritmen der oppe, starter jeg med 10, jeg går rett til 12, og deretter til venstre til 9. Og jeg kommer til enden av treet uten å finne 11. Men 11 eksisterer i mitt tre , det er bare på den andre siden.

Kan du vennligst forklare hva er begrensningene i et binært tre for denne algoritmen til å fungere på min treet?

Takk.

Publisert på 07/09/2010 klokken 05:31
kilden bruker
På andre språk...                            


5 svar

stemmer
3

Ikke forveksle mellom Binary treet og binært søketre. Den binære søk treet (i kort kalt BST) er en spesiell type av binært tre hvor alle nodene til venstre er mindre enn eller lik foreldrenoden, og alle nodene høyre er større enn foreldrenoden.

Mens eksempelet du har gitt er bare et binært tre og ikke en binært søketre. Du kan se at verdien 11 og 14 er overlatt til foreldrenoden 10 som bryter BST eiendom. Ta en titt her for binære søketrær.

Svarte 07/09/2010 kl. 05:34
kilden bruker

stemmer
1

Du har plassert nodene 14 og 11 på feil sted. Fra Wikipedia-artikkelen om BSTs :

  • Den venstre subtre av en node bare inneholder noder med tastene mindre enn noden nøkkel.
  • Retten undertreet av en node bare inneholder noder med tastene større enn noden nøkkel.
  • Både venstre og høyre subtre må også være binære søketrær.

Som du kan se, både 14 og 11 er større enn åtte.

Svarte 07/09/2010 kl. 05:35
kilden bruker

stemmer
3

Treet du presentert i ikke en BST. 11 og 14 ville aldri blitt satt inn til venstre for 10, og det er derfor algoritmen ikke søke der. 9 er også på sin plass.

Innsetting ifølge Wikipedia:

Innsetting begynner som et søk ville begynne; Hvis roten er ikke lik verdien gransker vi venstre eller høyre subtre som før. Etter hvert vil vi nå en ekstern node og legge verdien som sin høyre eller venstre barn, avhengig av noden verdi. Med andre ord, undersøker vi roten og rekursivt sette inn den nye noden til den venstre undertreet hvis den nye verdien er mindre enn bunn, eller den høyre subtre når den nye verdien er større enn eller lik roten.

Du kan fortelle at et binært tre er et BST hvis det har disse egenskapene (også fra Wikipedia):

  1. Den venstre subtre av en node bare inneholder noder med tastene mindre enn noden nøkkel.
  2. Retten undertreet av en node bare inneholder noder med tastene større enn noden nøkkel.
  3. Både venstre og høyre subtre må også være binære søketrær.
Svarte 07/09/2010 kl. 05:35
kilden bruker

stemmer
10

Det er bare fordi treet ikke er et binært søketre: det er ikke bestilt riktig. BST er bygget som beskrevet i algoritmen faktisk. For eksempel i treet: noden '9' er ikke i riktig posisjon fordi så 9 <10 bør det være under venstre grenen av rotnoden '10'. Samme for '14' og '11' som skal være på høyre gren.

for eksempel en BST kan sth som dette:

    10
  5    11
3   8    12
          14
Svarte 07/09/2010 kl. 05:37
kilden bruker

stemmer
1

treet er ikke et binært søketre

Svarte 07/09/2010 kl. 05:58
kilden bruker

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