[Algoritmo y estructura de datos 09] ¿Qué son árboles, árboles binarios y árboles de búsqueda binaria?

¡Hola a todos! Soy [bacteria de la IA] , 不熬夜programadora. Me 热爱AI、热爱分享、热爱开源! Este blog es mi resumen y reflexión sobre el aprendizaje. Si también estás 深度学习、机器视觉、算法、Python、C++interesado, puedes concentrarte en mi dinámica, aprendemos juntos y progresamos juntos ~

Hablando de árboles, todo el mundo los conoce, después de todo, son cosas comunes en la vida diaria. Pero el protagonista de hoy no es un árbol, hablemos de árboles, árboles binarios y árboles de búsqueda binarios en la estructura de datos y sus operaciones básicas.

Inserte la descripción de la imagen aquí


Uno, árbol y árbol binario

1.1 ¿Qué es un árbol?

Un árbol es una estructura de datos, que es una colección jerárquica compuesta por n (n> = 1) nodos finitos. Se le llama "árbol" porque parece un árbol al revés, lo que significa que tiene las raíces hacia arriba y las hojas hacia abajo.

El árbol está compuesto por nodos y bordes, y no hay estructura de datos en el anillo. A través de la siguiente figura, podemos comprender la estructura del árbol de forma más intuitiva.

Inserte la descripción de la imagen aquí

El árbol satisface las características de la definición recursiva. En otras palabras, si una estructura de datos es una estructura de árbol, luego de eliminar el nodo raíz, varias subestructuras también son árboles, generalmente llamados subárboles.

En un árbol, dependiendo de la relación jerárquica entre los nodos, los nombres de los nodos también son diferentes. Echemos un vistazo al siguiente árbol, como se muestra en la figura siguiente:
Inserte la descripción de la imagen aquí
Las relaciones y los nombres de los diferentes nodos son los siguientes:

  • Un nodo de nivel superior es el nodo B y el nodo C, luego A y C B es el nodo principal , A, B y C son los nodos secundarios .
  • Si B y C son ambos "hijos" de A, entonces B y C pueden llamarse nodos hermanos .
  • Si A no tiene un nodo padre, entonces A se puede llamar nodo raíz .
  • Los nodos G, H, I y F no tienen nodos secundarios, por lo que G, H, I y F se denominan nodos hoja .

Cuando hay un árbol, necesita usar la profundidad y la capa para describir la ubicación de los nodos en el árbol . Como se muestra en la figura anterior, el nivel de nodos se cuenta desde el nodo raíz:

  • La raíz es el primer nivel, como: A
  • Los "hijos" de la raíz son el segundo nivel, como B, C
  • El "hijo" de la raíz "hijo" es el tercer nivel, como D, E, F
  • Por analogía, la cuarta capa (la última capa) es: G, H, I

El número máximo de capas de nodos en el árbol es la profundidad del árbol (llamada profundidad, también conocida como altura), por lo que este es un árbol con una profundidad de 4.

1.2 ¿Qué es un árbol binario?

En la gran familia de árboles, hay un árbol especial que se usa con frecuencia y es un árbol binario . En un árbol binario, cada nodo tiene como máximo dos ramas, es decir, cada nodo tiene como máximo dos nodos hijo, que se denominan nodo hijo izquierdo y nodo hijo derecho .

En el árbol binario, hay dos tipos más especiales, como se muestra en la siguiente figura:

Inserte la descripción de la imagen aquí

  • Un árbol binario completo se define como todos los nodos excepto los nodos hoja que tienen 2 nodos secundarios .
  • Un árbol binario completo se define como el número máximo de nodos en otras capas, excepto la última capa, y los nodos hoja de la última capa están todos dispuestos a la izquierda .

Puede estar confundido. Un árbol binario completo no parece completo, pero ¿por qué lo llama así? En realidad, esto está relacionado con el almacenamiento del árbol binario. Hay dos formas de almacenar un árbol binario, una es el método de almacenamiento en cadena basado en punteros y la otra es el método de almacenamiento secuencial basado en matrices .

  • El método de almacenamiento en cadena es como una lista vinculada. Cada nodo tiene tres campos, uno almacena datos y los otros dos apuntan a los nodos secundarios izquierdo y derecho, como se muestra en la siguiente figura:

Inserte la descripción de la imagen aquí

  • El método de almacenamiento secuencial consiste en almacenar los nodos en la matriz de acuerdo con la ley, como se muestra en la figura siguiente. Para facilitar el cálculo, aceptaremos colocar el nodo raíz en la posición donde el subíndice es 1. Posteriormente, el nodo B se almacena en la posición del subíndice 2, el nodo C se almacena en la posición del subíndice 3, y así sucesivamente.
    Inserte la descripción de la imagen aquí

La razón por la que se denomina árbol binario completo es desde la perspectiva de la eficiencia en la utilización del espacio de almacenamiento . Para un árbol binario completo, solo se desperdicia la ubicación de almacenamiento con el subíndice 0. Si se trata de un árbol binario incompleto, se desperdiciará mucho espacio de almacenamiento.

En el árbol binario incompleto que se muestra en la figura siguiente, necesita reservar las posiciones de 5 y 6. Al mismo tiempo, las posiciones de los dos nodos secundarios 10 y 11 de 5 y las posiciones de los dos nodos secundarios 12 y 13 de 6. Un árbol binario de este tipo no utiliza completamente el espacio de almacenamiento de la matriz.
Inserte la descripción de la imagen aquí


En segundo lugar, el recorrido del árbol antes del pedido, el orden medio y el pedido posterior

A continuación, tomamos el árbol binario como ejemplo para introducir el funcionamiento del árbol Las operaciones de otros tipos de árboles son básicamente similares al árbol binario.

Se puede encontrar que las estructuras de datos que hemos aprendido antes son todas relaciones "uno a uno", es decir, los datos anteriores solo tienen una relación de conexión con los siguientes datos, como listas vinculadas, pilas y colas. La estructura de árbol es una relación de " uno a muchos ", es decir, el nodo principal anterior tiene una relación de conexión con varios nodos secundarios a continuación.

En la estructura "uno a uno", la búsqueda tiene un cierto valor y cada dato se puede recorrer directamente en secuencia. Sin embargo, el árbol es una relación de "uno a muchos", entonces, ¿en qué orden debe atravesarse?

De hecho, existen tres métodos muy clásicos para atravesar un árbol, que son el recorrido previo al pedido, el recorrido intermedio y el posterior al pedido. El orden aquí se refiere al orden transversal del nodo principal . El primer orden es atravesar primero el nodo principal, el orden medio es atravesar el nodo principal en el medio y el último orden es atravesar el nodo principal en último lugar.

No importa qué tipo de recorrido, se realiza mediante llamadas recursivas . Como se muestra abajo:

Inserte la descripción de la imagen aquí

  • Recorrido de preorden , para cualquier nodo en el árbol, imprima este nodo primero, luego recorra su subárbol izquierdo en preorden y finalmente recorra su subárbol derecho en preorden.
  • Recorrido de orden medio , para cualquier nodo del árbol, primero recorra su subárbol izquierdo en orden medio, luego imprima este nodo y finalmente recorra su subárbol derecho en orden medio.
  • El recorrido posterior al orden , para cualquier nodo del árbol, recorre secuencialmente su subárbol izquierdo, luego realiza el pedido posterior al subárbol derecho y finalmente se imprime a sí mismo.

Tres, las características del árbol de búsqueda binaria

Para un árbol binario sin propiedades especiales, aparte de la complejidad temporal del recorrido, la complejidad temporal de realizar operaciones de adición y supresión es O (1). La operación de búsqueda de los datos del árbol es la misma que la de la lista enlazada, necesita recorrer cada dato para juzgar, por lo que la complejidad del tiempo es O (n).

Pero cuando el árbol binario tiene algunas características (como el árbol de búsqueda binaria), puede usar estas características para reducir la complejidad del tiempo.

El árbol de búsqueda binaria (también llamado árbol de búsqueda binaria) tiene las siguientes características:

  • En cualquier nodo del árbol de búsqueda binaria, el valor de cada nodo en el subárbol izquierdo debe ser menor que el valor de este nodo; el valor de cada nodo en el subárbol derecho debe ser mayor que este El valor del nodo.
  • En un árbol de búsqueda binaria, se evitará en la medida de lo posible la situación en la que los valores de dos nodos son iguales.
  • Al recorrer el árbol de búsqueda binaria en orden, puede generar una cola de datos ordenada de pequeña a grande. Como se muestra en la figura siguiente, el resultado del recorrido en orden es 10, 13, 15, 16, 20, 21, 22, 26.

Inserte la descripción de la imagen aquí
Por lo tanto, el árbol de búsqueda binario puede considerarse simplemente como un árbol binario ordenado por reglas.


Cuarto, la adición, eliminación y verificación del funcionamiento del árbol de búsqueda binaria.

3.1 Buscar operación

Cuando usamos un árbol de búsqueda binario para realizar una operación de búsqueda, podemos hacer los siguientes juicios:

  • Primero juzgue si el nodo raíz es igual a los datos que se van a buscar y regrese si lo es.
  • Si el nodo raíz es mayor que los datos a buscar, la búsqueda se realiza de forma recursiva en el subárbol izquierdo hasta el nodo hoja.
  • Si el nodo raíz es más pequeño que los datos a buscar, la búsqueda se realiza de forma recursiva en el subárbol derecho hasta el nodo hoja.

La complejidad de tiempo consumida por tal " búsqueda binaria " puede reducirse a O (logn) . Con respecto a la búsqueda binaria, lo hablaré más adelante en la parte del algoritmo.

3.2 Insertar operación

Realizar una operación de inserción en un árbol de búsqueda binaria también es muy simple. Comenzando desde el nodo raíz, si los datos a insertar son más grandes que los datos del nodo raíz, y el nodo secundario derecho del nodo raíz no está vacío, continúe intentando realizar la operación de inserción en el subárbol derecho del nodo raíz. La inserción se realiza hasta que se encuentra un nodo hijo vacío.

Como se muestra en la figura siguiente, si el valor de X que se insertará es 14, debe determinar la relación de tamaño entre X y el nodo raíz:

  • Dado que 14 es menor que 16, concéntrese en su subárbol izquierdo y continúe juzgando la relación entre X y 13.
  • Dado que 14 es mayor que 13, concéntrese en el subárbol derecho y continúe juzgando la relación entre X y 15.
  • Dado que 14 es menor que 15, enfóquese en su subárbol izquierdo.

Debido a que el subárbol izquierdo está vacío en este momento, la relación entre el puntero izquierdo de 15 nodos y el nodo X se establece directamente a través del puntero y se completa la acción de inserción.
Inserte la descripción de la imagen aquí
La complejidad temporal de la inserción de datos en un árbol de búsqueda binaria es O (logn). Pero esto no significa que sea más complicado que los árboles binarios ordinarios. La razón es que la complejidad de tiempo aquí se gasta más en atravesar los datos para encontrar la posición de búsqueda, y la complejidad de tiempo de ejecutar realmente la acción de inserción sigue siendo O (1).

3.3 Eliminar operación

La operación de eliminación del árbol de búsqueda binaria será más complicada, porque el árbol después de eliminar un cierto nodo todavía tiene que satisfacer las propiedades del árbol de búsqueda binaria . Dividimos la discusión en las siguientes tres situaciones.

(1) Si el nodo que se eliminará es un nodo hoja , elimínelo directamente y apunte su puntero de nodo principal a nulo.
Inserte la descripción de la imagen aquí

(2) Si el nodo que se va a eliminar tiene solo un nodo hijo , simplemente reemplace el puntero del nodo hijo al que apunta su nodo padre con el puntero de su nodo hijo.
Inserte la descripción de la imagen aquí(3) Si el nodo que se va a eliminar tiene dos subnodos , existen dos métodos de operación factibles.

  • La primera es encontrar el nodo más grande en el subárbol izquierdo de este nodo y reemplazar el nodo que se eliminará.

Inserte la descripción de la imagen aquí

  • El segundo es encontrar el nodo más pequeño en el subárbol derecho de este nodo y reemplazar el nodo que se eliminará.

Inserte la descripción de la imagen aquí


Este artículo son mis notas de estudio para el estudio de "Reaprendizaje de estructuras de datos y algoritmos". Solo se utiliza para el aprendizaje y la comunicación. Se comparte por la presente, ¡no lo reimprima comercialmente! Referencia de imagen en el artículo: https://kaiwu.lagou.com/course/courseInfo.htm?courseId=185#/detail/pc?id=3347

Inserte la descripción de la imagen aquí

¡Desarrolle un hábito, como primero y luego observe! ¡Tu apoyo es la mayor motivación para mi creación!

Supongo que te gusta

Origin blog.csdn.net/wjinjie/article/details/108484738
Recomendado
Clasificación