Copaci binare de căutare

voturi
5

Acesta este un cod găsit pe wikipedia privind 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

Acum, aici este un arbore binar:

       10
    5        12
  3   8    9   14
     4 11  

Dacă eu sunt în căutarea 11, și am urmați algoritmul de acolo, am începe cu 10, mă duc dreptul la 12, și apoi a plecat la 9. Și am ajunge la sfârșitul copac, fără a găsi 11. Dar 11 există în copacul meu , este doar pe partea cealaltă.

Puteți să vă rugăm să explicați care sunt restricțiile într-un arbore binar pentru acest algoritm pentru a lucra la copacul meu?

Mulțumiri.

Întrebat 07/09/2010 la 06:31
sursa de către utilizator
În alte limbi...                            


5 răspunsuri

voturi
3

A nu se confunda între binar copac și binar de căutare copac. Binar copac de căutare (pe scurt numit ca BST) este un tip special de arbore binar în cazul în care toate nodurile de pe stânga sunt mai mică decât sau egală cu nodul părinte și toate nodurile din dreapta sunt mai mari decât nodul părinte.

Întrucât exemplul care le - ați dat este doar un arbore binar și nu un binar de căutare copac. Puteți vedea că valoarea 11 și 14 sunt lăsate la nodul părinte 10 care încalcă proprietatea BST. Uitați-vă aici pentru copaci binar de căutare.

Publicat 07/09/2010 la 06:34
sursa de către utilizator

voturi
1

Ați plasat nodurile 14 și 11 în locul greșit. Din articolul Wikipedia pe BSTs :

  • Subarborele stâng al unui nod conține doar nodurile cu chei mai mici decât cheia nodului.
  • Subarborele din dreapta al unui nod conține numai noduri cu taste mai mari decât cheia nodului.
  • Atât la stânga și la dreapta subarbori trebuie să fie, de asemenea, arbori de căutare binare.

După cum puteți vedea, ambele 14 și 11 sunt mai mari decât 8.

Publicat 07/09/2010 la 06:35
sursa de către utilizator

voturi
3

Copacul pe care a prezentat-o ​​în care nu BST. 11 și 14 nu ar fi fost introduse în stânga 10, și de aceea algoritmul nu caută acolo. 9 este, de asemenea, din loc.

Inserția conform Wikipedia:

Inserția începe ca o căutare va începe; dacă rădăcina nu este egală cu valoarea, vom căuta subramificații stânga sau la dreapta ca înainte. În cele din urmă, vom ajunge la un nod extern și adăugați valoare ca copilul său dreapta sau stânga, în funcție de valoarea nodului. Cu alte cuvinte, vom examina rădăcina și introduceți recursiv noul nod la subarborele stânga dacă noua valoare este mai mică decât rădăcina, sau subarborelui drept în cazul în care noua valoare este mai mare sau egală cu rădăcina.

Puteți spune că un arbore binar este un BST dacă are aceste proprietăți (dar și de pe Wikipedia):

  1. Subarborele stâng al unui nod conține doar nodurile cu chei mai mici decât cheia nodului.
  2. Subarborele din dreapta al unui nod conține numai noduri cu taste mai mari decât cheia nodului.
  3. Atât la stânga și la dreapta subarbori trebuie să fie, de asemenea, arbori de căutare binare.
Publicat 07/09/2010 la 06:35
sursa de către utilizator

voturi
10

Este doar pentru că arborele nu este un arbore binar de căutare: nu este comandat corect. BST este construit așa cum este descris în algoritmul de fapt. De exemplu, în arborele: nodul „9“ nu este în poziția corectă, deoarece ca 9 <10 ar trebui să fie sub ramura stângă a nodului rădăcină „10“. La fel de „14“ și „11“, care ar trebui să fie pe ramura dreaptă.

de exemplu, un BST ar putea sth ca aceasta:

    10
  5    11
3   8    12
          14
Publicat 07/09/2010 la 06:37
sursa de către utilizator

voturi
1

copac nu este un arbore binar de căutare

Publicat 07/09/2010 la 06:58
sursa de către utilizator

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