Les arbres binaires de recherche

voix
5

Ceci est un code trouvé sur wikipedia concernant 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

Maintenant, voici un arbre binaire:

       10
    5        12
  3   8    9   14
     4 11  

Si je suis à la recherche de 11, et je suis l'algorithme là-bas, je commence par 10, je vais droit à 12, puis à gauche à 9. Et j'arrive à la fin de l'arbre sans trouver 11. Mais 11 existe dans mon arbre , il est juste de l'autre côté.

Pouvez-vous expliquer s'il vous plaît quelles sont les restrictions dans un arbre binaire pour cet algorithme pour travailler sur mon arbre?

Merci.

Créé 07/09/2010 à 06:31
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
3

Ne pas confondre entre Binary Tree et binaire Rechercher Arbre. L'arbre de recherche binaire (bref appelé BST) est un type d'arbre binaire où tous les nœuds de gauche sont inférieur ou égal au nœud parent et tous les noeuds sont bien plus que le nœud parent.

Alors que l'exemple que vous avez donné est juste un arbre binaire et non une recherche binaire Arbre. Vous pouvez voir que la valeur 11 et 14 sont laissés au nœud parent 10 qui porte atteinte à la propriété BST. Jetez un oeil ici pour les arbres binaires de recherche.

Créé 07/09/2010 à 06:34
source utilisateur

voix
1

Vous avez placé les nœuds 14 et 11 au mauvais endroit. De l'article de Wikipedia sur BSTS :

  • Le sous-arbre gauche d'un noeud ne contient que des noeuds avec des clés moins que la clé du nœud.
  • Le sous-arbre droit d'un noeud ne contient que des noeuds avec des touches plus grandes que la clé du nœud.
  • Les deux sous-arbres gauche et droite doivent aussi être des arbres binaires de recherche.

Comme vous pouvez le voir, à la fois 14 et 11 sont supérieures à 8.

Créé 07/09/2010 à 06:35
source utilisateur

voix
3

L'arbre que vous avez présenté à pas BST. 11 et 14 aurait jamais été inséré à la gauche de 10, et c'est la raison pour laquelle l'algorithme ne recherche pas là. 9 est également hors de propos.

Insertion selon Wikipedia:

L'insertion commence comme une recherche commencerait; si la racine est pas égale à la valeur, on recherche les sous-arbres gauche ou à droite comme avant. Finalement, nous atteindrons un nœud externe et ajoutez la valeur comme son enfant à droite ou à gauche, en fonction de la valeur du nœud. En d'autres termes, nous examinons la racine et insérez récursive le nouveau nœud à la sous-arborescence à gauche si la nouvelle valeur est inférieure à la racine, ou le sous-arbre droit si la nouvelle valeur est supérieure ou égale à la racine.

Vous pouvez dire qu'un arbre binaire est un BST si elle a ces propriétés (également de Wikipedia):

  1. Le sous-arbre gauche d'un noeud ne contient que des noeuds avec des clés moins que la clé du nœud.
  2. Le sous-arbre droit d'un noeud ne contient que des noeuds avec des touches plus grandes que la clé du nœud.
  3. Les deux sous-arbres gauche et droite doivent aussi être des arbres binaires de recherche.
Créé 07/09/2010 à 06:35
source utilisateur

voix
10

Il est juste parce que votre arbre est pas un arbre de recherche binaire: il est pas commandé correctement. Le BST est construit comme décrit dans l'algorithme fait. Par exemple, dans votre arbre: le nœud « 9 » est pas à la bonne position parce que 9 <10, il devrait être sous la branche gauche de votre nœud racine « 10 ». Idem pour « 14 » et « 11 » qui devrait être sur la branche droite.

par exemple, un BST pourrait qch comme ceci:

    10
  5    11
3   8    12
          14
Créé 07/09/2010 à 06:37
source utilisateur

voix
1

votre arbre n'est pas un arbre de recherche binaire

Créé 07/09/2010 à 06:58
source utilisateur

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