Extracto de árbol rojo negro

Árbol relacionado

Árbol binario

Algunos conceptos simples

  1. Árbol binario completo: además de los nodos hoja, cada nodo tiene nodos secundarios izquierdo y derecho, y los nodos hoja están en la parte inferior /
  2. Árbol binario completo: los nodos hoja están en las dos capas inferiores, los nodos hoja de la última capa están dispuestos a la izquierda y el número de nodos en otras capas debe alcanzar el máximo, excepto la última capa

Consejo: La razón por la que se realiza el árbol binario completo es que en la implementación del árbol binario, hay dos formas de cadena y matriz: el árbol binario completo solo desperdicia un espacio con un subíndice de 0 en la implementación de la matriz (los nodos izquierdo y derecho son iguales al nodo raíz * 2 (+1 derecha)) en lugar de un árbol binario completo, habrá mucho espacio extra que es inútil

Árbol de búsqueda binaria

Concepto: el árbol de búsqueda binario requiere que el valor de cada nodo en el subárbol izquierdo de cualquier nodo en el árbol sea menor que el valor de este nodo, y el valor del nodo del subárbol derecho debe ser mayor que el valor de este nodo

Operación de búsqueda: Primero, observamos cómo encontrar un nodo en un árbol de búsqueda binario. Primero tomamos el nodo raíz, si es igual a los datos que estamos buscando, luego regresamos. Si los datos que se encuentran son más pequeños que el valor del nodo raíz, busque recursivamente en el subárbol izquierdo; si los datos que se encuentran son mayores que el valor del nodo raíz, busque recursivamente en el subárbol derecho.

Operación de inserción: el proceso de inserción del árbol de búsqueda binario es algo similar a la operación de búsqueda. Los datos recién insertados generalmente están en el nodo hoja, por lo que solo necesitamos comenzar desde el nodo raíz y comparar la relación de tamaño entre los datos que se insertarán y el nodo. Si los datos a insertar son más grandes que los datos del nodo, y el subárbol derecho del nodo está vacío, los nuevos datos se insertan directamente en la posición del subnodo derecho; si no está vacío, el subárbol derecho se recorre recursivamente para encontrar la posición de inserción. De manera similar, si los datos que se insertarán son más pequeños que el valor del nodo y el subárbol izquierdo del nodo está vacío, los nuevos datos se insertan en la posición del nodo secundario izquierdo; si no está vacío, el subárbol izquierdo se atraviesa recursivamente para encontrar la posición de inserción .

Operación de eliminación: las operaciones de búsqueda e inserción del árbol de búsqueda binario son relativamente simples y fáciles de entender, pero su operación de eliminación es más complicada. En vista de la diferencia en el número de nodos secundarios del nodo que se va a eliminar, debemos tratarlo en tres casos.

  1. El primer caso es que si el nodo que se va a eliminar no tiene hijos, solo necesitamos establecer directamente el puntero al nodo que se va a eliminar del nodo padre a nulo. Por ejemplo, elimine el nodo 55 en la figura.
  2. El segundo caso es que si el nodo que se va a eliminar tiene solo un nodo hijo (solo el nodo hijo izquierdo o derecho), solo necesitamos actualizar el puntero al nodo que se va a eliminar en el nodo padre, de modo que apunte al nodo hijo del nodo que se va a eliminar Eso es todo Por ejemplo, elimine el nodo 13 en la figura.
  3. El tercer caso es que si el nodo que se va a eliminar tiene dos nodos secundarios, esto es más complicado. Necesitamos encontrar el nodo más pequeño en el subárbol derecho de este nodo y reemplazarlo con el nodo que se va a eliminar. Luego elimine este nodo más pequeño, porque el nodo más pequeño no debe tener un nodo hijo izquierdo (si hay un nodo hijo izquierdo, no es el nodo más pequeño), por lo que podemos aplicar las dos reglas anteriores para eliminar este nodo más pequeño. Por ejemplo, elimine el nodo 18 en la figura.

    También hay una característica importante: el recorrido de orden medio del árbol de búsqueda binaria puede generar secuencias de datos ordenadas. La complejidad temporal es O (n), que es muy eficiente, por lo que el árbol de búsqueda binaria también se denomina árbol de clasificación binaria.

En el desarrollo real, lo que almacenamos en el árbol binario puede ser un objeto que contenga muchos campos. Utilizamos un campo del objeto como clave para construir el árbol binario, y los otros campos se denominan datos de satélite.

Independientemente de si la operación es inserción, eliminación o búsqueda, la complejidad del tiempo es proporcional a la altura del árbol, que es O (altura). La altura del árbol binario equilibrado está cerca de logn, por lo que la complejidad temporal de las operaciones de inserción, eliminación y búsqueda es relativamente estable, que es O (logn).

Árbol rojo negro

El árbol de búsqueda binario balanceado se define estrictamente como esto: la diferencia entre las alturas de los subárboles izquierdo y derecho de cualquier nodo del árbol binario no es mayor que 1. El primer árbol binario balanceado inventado es el árbol AVL.
Muchos libros equilibrados y borrados no tienen símbolos estrictos, como árboles rojos y negros. El camino más largo desde el nodo raíz hasta cada nodo hoja puede ser dos veces más grande que el camino más corto.
La intención original de inventar una estructura de datos de árbol binario tan equilibrada es resolver el problema de la degradación de la complejidad del árbol de búsqueda binario común en el caso de inserción, eliminación y otras actualizaciones dinámicas frecuentes. Por lo tanto, el significado de "equilibrado" en el árbol de búsqueda binario equilibrado es en realidad hacer que todo el árbol se vea más "simétrico" y "equilibrado" en los lados izquierdo y derecho. No parezca que el subárbol izquierdo es muy alto y el subárbol derecho es muy corto. De esta forma, la altura de todo el árbol es relativamente baja, y la eficiencia de las operaciones de inserción, eliminación y búsqueda correspondientes es mayor.

Concepto:
· raíz es negro;
· cada nodo hoja son negro vacío (NIL), es decir, los nodos hoja no almacenan datos;
· los nodos adyacentes no pueden ser a la vez rojo, es decir, Los nodos rojos están separados por nodos negros;
cada nodo, todas las rutas desde ese nodo a sus nodos hoja accesibles, contienen el mismo número de nodos negros;

// Después de que se elimina el nodo rojo, algunos no tienen nodos principales, tomarán directamente los nodos abuelo (nodos principales de estos nodos) como nodos principales. Por lo tanto, el árbol binario anterior se convierte en un quadtree.
// La definición anterior del árbol rojo-negro tiene esto: cada ruta desde cualquier nodo al nodo hoja alcanzable contiene el mismo número de nodos negros. Tomamos algunos nodos del quadtree y los colocamos en la posición del nodo hoja, el quadtree se convierte en un árbol binario completo. Por lo tanto, la altura de un quadtree que contiene solo nodos negros es menor que la altura de un árbol binario completo que contiene el mismo número de nodos. En la sección anterior, dijimos que la altura del árbol binario completo es aproximadamente log2n, y la altura del "árbol negro" quadtree es más baja que la del árbol binario completo, por lo que la altura del "árbol negro" con los nodos rojos eliminados no excederá log2n.

Ahora sabemos la altura del "árbol negro" que contiene solo nodos negros, así que ahora agregamos los nodos rojos, ¿cuánto será la altura? De los ejemplos y definiciones de los árboles rojos y negros que dibujé arriba, en los árboles rojos y negros, los nodos rojos no pueden ser adyacentes, es decir, si hay un nodo rojo, debe haber al menos un nodo negro, separándolo de otros nodos rojos . La ruta que contiene la mayoría de los nodos negros en el árbol rojo-negro no excederá de log2n, por lo que después de agregar el nodo rojo, la ruta más larga no excederá de 2log2n, es decir, la altura del árbol rojo-negro es de aproximadamente 2log2n.

// Implementación de árbol rojo y negro

Supongo que te gusta

Origin www.cnblogs.com/EvansPudding/p/12670845.html
Recomendado
Clasificación