Los árboles binarios de búsqueda

votos
5

Esto es código encontrado en la wikipedia en relación con 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

Ahora aquí es un árbol binario:

       10
    5        12
  3   8    9   14
     4 11  

Si Estoy buscando 11, y sigo el algoritmo de allí, comienzo con 10, voy derecho a la 12, y luego fui a 9. Y llego a la final del árbol sin encontrar 11. Pero 11 existe en mi árbol , es sólo en el otro lado.

¿Puede usted por favor explique cuáles son las restricciones en un árbol binario para este algoritmo para trabajar en mi árbol?

Gracias.

Publicado el 07/09/2010 a las 06:31
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
3

No se debe confundir entre el árbol binario y búsqueda binaria árbol. El árbol binario de búsqueda (en resumen llamado como BST) es un tipo especial de árbol binario en el que todos los nodos de la izquierda son menor o igual que el nodo padre y todos los nodos de la derecha son mayores que el nodo padre.

Mientras que el ejemplo que has dado es solo un árbol binario y no un árbol de búsqueda binaria. Se puede ver que el valor de 11 y 14 quedan al nodo padre 10, que viole la propiedad BST. Echar un vistazo aquí para árboles binarios de búsqueda.

Respondida el 07/09/2010 a las 06:34
fuente por usuario

votos
1

Que haya colocado los nodos y 14 11 en el lugar equivocado. A partir del artículo de Wikipedia sobre BSTs :

  • El subárbol izquierdo de un nodo contiene sólo los nodos con claves menos que la clave del nodo.
  • El subárbol derecho de un nodo contiene sólo los nodos con claves mayores que la clave del nodo.
  • Tanto la izquierda como la derecha subárboles también deben ser árboles binarios de búsqueda.

Como se puede ver, ambos 14 y 11 son mayores que 8.

Respondida el 07/09/2010 a las 06:35
fuente por usuario

votos
3

El árbol que no se presentan en un BST. 11 y 14 nunca se han insertado a la izquierda de 10, y es por eso que el algoritmo no busca allí. 9 es también fuera de lugar.

Inserción según la Wikipedia:

La inserción comienza como una búsqueda comenzaría; si la raíz no es igual al valor, buscamos los subárboles izquierdo o derecho como antes. Con el tiempo, vamos a llegar a un nodo externo y agregar el valor como su hijo derecho o izquierdo, dependiendo del valor del nodo. En otras palabras, examinamos la raíz y de forma recursiva insertamos el nuevo nodo con el subárbol izquierdo si el nuevo valor es menor que la raíz o el subárbol derecho si el nuevo valor es mayor o igual a la raíz.

Se puede decir que un árbol binario es un BST si tiene estas propiedades (también de Wikipedia):

  1. El subárbol izquierdo de un nodo contiene sólo los nodos con claves menos que la clave del nodo.
  2. El subárbol derecho de un nodo contiene sólo los nodos con claves mayores que la clave del nodo.
  3. Tanto la izquierda como la derecha subárboles también deben ser árboles binarios de búsqueda.
Respondida el 07/09/2010 a las 06:35
fuente por usuario

votos
10

Es sólo debido a su árbol no es un árbol binario de búsqueda: no se ordena correctamente. El BST se construye como se describe en el algoritmo realidad. Por ejemplo, en su árbol: el nodo '9' no está en la posición correcta porque como 9 <10 debe ser bajo la rama izquierda de su nodo raíz '10'. Lo mismo para '14' y '11' que debe estar en la rama derecha.

por ejemplo, un BST podría sth como esto:

    10
  5    11
3   8    12
          14
Respondida el 07/09/2010 a las 06:37
fuente por usuario

votos
1

su árbol no es un árbol binario de búsqueda

Respondida el 07/09/2010 a las 06:58
fuente por usuario

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