Entendiendo el árbol rojo-negro. Parte 2. Equilibrio e inserción

Parte 1. Introducción

Parte 2. Equilibrio e inserción





Esta es la parte 2 de la serie Comprensión del árbol rojo-negro. Si te perdiste la primera parte, te recomiendo que la consultes aquí . Allí resolvimos el motivo de la aparición de cchd y pusimos algunas de sus propiedades en los estantes.





En esta parte veremos la inserción y el equilibrio. Estas cosas van una al lado de la otra, sin equilibrar el árbol perderá sus propiedades y tendrá poco sentido.





Teniendo en cuenta que kchd es un árbol 2-3 (a veces te lo recordaré), comenzaremos inmediatamente con su construcción. Pero todavía se necesitan algunas aclaraciones.





  1. Todos los nodos insertados, excepto la raíz del árbol, se insertan con color rojo. Esto se explica por el hecho de que siempre agregamos primero un valor a un nodo ya existente y solo después lo equilibramos (recuerde la situación con los 4 nodos resultantes).





  2. En la primera parte, descubrimos que estamos desmontando un árbol rojo-negro del lado izquierdo , de esto se deduce que los nodos rojos solo pueden estar a la izquierda (el caso opuesto requiere equilibrio).





Tratemos también las tres operaciones que necesitamos al equilibrar. Les pido que no piensen en ellos ahora y profundicen en más detalles ya durante la construcción del árbol. Proporcionaré una descripción de ellos aquí para que no interfieran más tarde :)





- . , , -. , . - .





, . , .





( )

. .





ilustración de giro a la izquierda

, parentNode ( parentNode - x, childNode - y) childNode, . ! , , childNode , parentNode , ( , childNode - , , parentColor = RED, ). "" childNode (, tempNode). , . , childNode, parentNode, childNode, , (/) parentNode, parentNode .





( )

, . .





ilustración de giro a la derecha

, parentNode . , parentNode - . , .





, ( , ), parentNode! ( ). .





- .

, .





24. . , , .





, , 5. , .





1 5. . , !





, - ( ). . - . , - . \ . , .





. , , , .





, 3 : , , .





1 , . . 5 - , ( ). 24 , , .





. - . , . - 24. .





, . ! . ( 24 , , )





( )! 2-3 .





, 2-3 ("" + ), , :) , , 2-3 , - , , "" .





. 15. 24. .





3. , 1, -1.





, . . + . ( , , ). , .





! .





, - , .





- 8. , . . , , .





+ .





, ( 15) - , . . , - . . !





- - .





, . , , . . .





. , . 2-3 ( 13 16, , ).





- , , \. .





, , .





  1. -





  2. -





  3. - - , . , , . , !





- , . , , . , !





Ahora puede repasar la construcción del árbol nuevamente y analizar, verificar las propiedades del primer artículo, hacer las preguntas "¿y si ...?" (créeme, ¡esto es muy útil!). En general, esto es todo lo que quería decirles sobre cómo insertar un nodo en un árbol rojo-negro del lado izquierdo.





Un poco sobre la operación de búsqueda de valor.

La operación de obtención no será diferente de la búsqueda en cualquier otro árbol binario: el color no está involucrado de ninguna manera.





Conclusión

Con esto concluye nuestra segunda parte sobre la inserción y el equilibrio de la ccd. ¡Haga sus preguntas, critique y complemente el artículo a continuación! En la tercera parte final, hablaré sobre el tema más difícil del árbol rojo-negro: eliminar un elemento. Nos vemos:)








All Articles