binary search tree c
Tutorial detallado sobre el árbol de búsqueda binaria (BST) en C ++, incluidas operaciones, implementación de C ++, ventajas y programas de ejemplo:
Un árbol de búsqueda binaria o BST, como se le llama popularmente, es un árbol binario que cumple las siguientes condiciones:
- Los nodos que son menores que el nodo raíz que se coloca como hijos izquierdos de la BST.
- Los nodos que son mayores que el nodo raíz que se coloca como los hijos correctos de la BST.
- Los subárboles izquierdo y derecho son, a su vez, árboles de búsqueda binaria.
Esta disposición de ordenar las teclas en una secuencia particular facilita al programador realizar operaciones como buscar, insertar, borrar, etc. de manera más eficiente. Si los nodos no están ordenados, es posible que tengamos que comparar todos y cada uno de los nodos antes de poder obtener el resultado de la operación.
=> Consulte la serie completa de capacitación en C ++ aquí.
Lo que vas a aprender:
- Árbol de búsqueda binaria C ++
- Operaciones básicas
- Implementación del árbol de búsqueda binaria C ++
- Ventajas de BST
- Aplicaciones de BST
- Conclusión
- Lectura recomendada
Árbol de búsqueda binaria C ++
A continuación se muestra un ejemplo de BST.
Los árboles de búsqueda binaria también se conocen como 'árboles binarios ordenados' debido a este orden específico de nodos.
De la BST anterior, podemos ver que el subárbol izquierdo tiene nodos que son menores que la raíz, es decir, 45, mientras que el subárbol derecho tiene los nodos que son mayores que 45.
Ahora analicemos algunas operaciones básicas de BST.
Operaciones básicas
# 1) Insertar
La operación de inserción agrega un nuevo nodo en un árbol de búsqueda binaria.
El algoritmo para la operación de inserción del árbol de búsqueda binaria se proporciona a continuación.
realidad virtual compatible con xbox one|_+_|
Como se muestra en el algoritmo anterior, tenemos que asegurarnos de que el nodo se coloque en la posición adecuada para no violar el pedido de BST.
Como vemos en la secuencia de diagramas anterior, realizamos una serie de operaciones de inserción. Después de comparar la llave a insertar con el nodo raíz, se elige el subárbol izquierdo o derecho para que la llave se inserte como un nodo hoja en la posición apropiada.
# 2) Eliminar
La operación de eliminación elimina un nodo que coincide con la clave dada de BST. También en esta operación, tenemos que reposicionar los nodos restantes después de la eliminación para que no se viole el orden de BST.
Por lo tanto, dependiendo de qué nodo tengamos que eliminar, tenemos los siguientes casos de eliminación en BST:
# 1) Cuando el nodo es un nodo hoja
Cuando el nodo que se va a eliminar es un nodo hoja, lo eliminamos directamente.
# 2) Cuando el nodo tiene solo un hijo
Cuando el nodo que se va a eliminar tiene solo un hijo, copiamos el hijo en el nodo y lo eliminamos.
# 3) Cuando el nodo tiene dos hijos
Si el nodo que se va a eliminar tiene dos hijos, entonces buscamos el sucesor en orden para el nodo y luego copiamos el sucesor en orden en el nodo. Más tarde, eliminamos el sucesor inorder.
En el árbol anterior para eliminar el nodo 6 con dos hijos, primero encontramos el sucesor en orden para que ese nodo sea eliminado. Encontramos el sucesor en orden encontrando el valor mínimo en el subárbol derecho. En el caso anterior, el valor mínimo es 7 en el subárbol derecho. Lo copiamos en el nodo que se va a eliminar y luego eliminamos el sucesor del orden.
# 3) Buscar
La operación de búsqueda de BST busca un elemento en particular identificado como 'clave' en BST. La ventaja de buscar un elemento en BST es que no necesitamos buscar en todo el árbol. En cambio, debido al orden en BST, simplemente comparamos la clave con la raíz.
Si la clave es la misma que root, devolvemos root. Si la clave no es raíz, la comparamos con la raíz para determinar si necesitamos buscar en el subárbol izquierdo o derecho. Una vez que encontramos el subárbol, necesitamos buscar la clave y la buscamos de forma recursiva en cualquiera de los subárboles.
A continuación se muestra el algoritmo para una operación de búsqueda en BST.
|_+_|
Si queremos buscar una clave con valor 6 en el árbol anterior, primero comparamos la clave con el nodo raíz, es decir, si (6 == 7) => No si (6<7) =Yes; this means that we will omit the right subtree and search for the key in the left subtree.
Luego descendemos al subárbol izquierdo. Si (6 == 5) => No.
Si (6 No; esto significa 6> 5 y tenemos que movernos hacia la derecha.
Si (6 == 6) => Sí; se encuentra la clave.
# 4) Travesías
Ya hemos discutido los recorridos del árbol binario. En el caso de BST también, podemos atravesar el árbol para obtener la secuencia inOrder, preorder o postOrder. De hecho, cuando atravesamos la BST en la secuencia Inorder01, obtenemos la secuencia ordenada.
Lo hemos mostrado en la siguiente ilustración.
Los recorridos del árbol anterior son los siguientes:
Traversal en orden (lnr): 3 5 6 7 8 9 10
Recorrido de pedidos anticipados (nlr): 7 5 3 6 9 8 10
Traslado posterior al pedido (lrn): 3 6 5 8 10 9 7
Ilustración
Construyamos un árbol de búsqueda binario a partir de los datos que se proporcionan a continuación.
45 30 60 65 70
error de referencia indefinido de c ++
Tomemos el primer elemento como nodo raíz.
#1) 45
En los pasos siguientes, colocaremos los datos de acuerdo con la definición del árbol de búsqueda binaria, es decir, si los datos son menores que el nodo principal, se colocarán en el hijo izquierdo y si los datos son mayores que el nodo principal, entonces será el niño adecuado.
Estos pasos se muestran a continuación.
#2) 30
#3) 60
#4) 65
#5) 70
Cuando realizamos el recorrido en orden en el BST anterior que acabamos de construir, la secuencia es la siguiente.
Podemos ver que la secuencia transversal tiene elementos dispuestos en orden ascendente.
Implementación del árbol de búsqueda binaria C ++
Demostremos BST y sus operaciones usando la implementación de C ++.
|_+_|Producción:
Árbol de búsqueda binario creado (recorrido en orden):
30 40 60 65 70
Eliminar nodo 40
Recorrido en orden para el árbol de búsqueda binario modificado:
30 60 65 70
En el programa anterior, generamos la BST para la secuencia transversal en orden.
Ventajas de BST
# 1) La búsqueda es muy eficiente
Tenemos todos los nodos de BST en un orden específico, por lo que buscar un artículo en particular es muy eficiente y rápido. Esto se debe a que no necesitamos buscar en todo el árbol y comparar todos los nodos.
Solo tenemos que comparar el nodo raíz con el elemento que estamos buscando y luego decidimos si necesitamos buscar en el subárbol izquierdo o derecho.
# 2) Trabajo eficiente en comparación con matrices y listas vinculadas
Cuando buscamos un elemento en el caso de BST, eliminamos la mitad del subárbol izquierdo o derecho en cada paso, mejorando así el rendimiento de la operación de búsqueda. Esto contrasta con las matrices o las listas enlazadas en las que necesitamos comparar todos los elementos de forma secuencial para buscar un elemento en particular.
# 3) Insertar y eliminar son más rápidos
Las operaciones de inserción y eliminación también son más rápidas en comparación con otras estructuras de datos como listas vinculadas y matrices.
Aplicaciones de BST
Algunas de las principales aplicaciones de BST son las siguientes:
- BST se utiliza para implementar la indexación multinivel en aplicaciones de bases de datos.
- BST también se usa para implementar construcciones como un diccionario.
- BST se puede utilizar para implementar varios algoritmos de búsqueda eficientes.
- BST también se utiliza en aplicaciones que requieren una lista ordenada como entrada, como las tiendas en línea.
- Las BST también se utilizan para evaluar la expresión mediante árboles de expresión.
Conclusión
Los árboles de búsqueda binaria (BST) son una variación del árbol binario y se utilizan ampliamente en el campo del software. También se denominan árboles binarios ordenados, ya que cada nodo de BST se coloca de acuerdo con un orden específico.
El recorrido en orden de BST nos da la secuencia ordenada de elementos en orden ascendente. Cuando se utilizan BST para realizar búsquedas, resulta muy eficaz y se realiza en muy poco tiempo. Las BST también se utilizan para una variedad de aplicaciones como la codificación de Huffman, la indexación de múltiples niveles en bases de datos, etc.
=> Lea la popular serie de capacitación en C ++ aquí.
Lectura recomendada
- Estructura de datos de árbol binario en C ++
- Estructura de datos de montón y árbol AVL en C ++
- Estructura de datos de árbol B y árbol B + en C ++
- Operaciones básicas de entrada / salida en C ++
- Operaciones de E / S básicas en Java (flujos de entrada / salida)
- Árboles en C ++: terminología básica, técnicas transversales y tipos de árboles de C ++
- Operaciones de entrada y salida de archivos en C ++
- Punteros y operaciones de puntero en C ++