Arboles Rojo

Anuncio
Un árbol de búsqueda binaria de altura h puede implementar cualquier
operación básica (Busca, Inserta, Anula, etc.) en tiempo O(h). Por este
detalle, las operaciones son de rápida ejecución si la altura del árbol de
búsqueda es pequeña, pero si la altura es grande su ejecución no será
mejor que las de una lista ligada.
Los árboles Rojo-Negro es uno de varios árboles de búsqueda que están
balanceados con el fin de que sus operaciones tomen O(log n) tiempo en
el peor de los casos.
Los árboles Rojo-Negro fueron inventados por R. Bayer bajo el nombre
“Arboles B simetricos binarios”.
Guibas y Sedgewick estudiaron sus propiedades e introdujeron la
convención de coloreo rojo-negro.
Anderson desarrolló una variante fácil de codificar de este tipo de árboles,
variante a la que Weiss llamó árboles AA, que solo se diferencian en que
los hijos izquierdos nunca son rojos.
•Cada nodo solo puede ser rojo o negro.
•La raíz es negra.
•Cada apuntador de hoja es negro.
Los árboles Rojo-Negro son árboles de búsqueda binaria con un bit extra
de almacenamiento por nodo: Su color.
Su recorrido puede ser por cualquier color (no necesariamente debe ser
todos rojos o negros) desde la raíz hasta la hoja.
Estos árboles garantizan que los recorridos mas largos varían a lo mas en
el doble del tamaño del mas corto, así que estos árboles resultan ser
prácticamente balanceados.
Los nodos que componen a estos árboles contienen básicamente los
campos de color, izquierda, derecha y dato.
Debido a que las operaciones de altas y bajas sobre este tipo de árbol puede
alterar sus propiedades es necesario contar con procedimientos para
restaurarlos, tales como: cambios de color y rotaciones. Para cambiar el color
de un nodo es suficiente con cambiar el valor del color en el nodo en
cuestión. Sin embargo las rotaciones alteran los apuntadores. Puede haber
rotaciones hacia la izquierda y hacia la derecha.
•Si algún nodo es rojo, sus dos hijos son negros.
•Cada camino desde cualquier nodo hasta una hoja descendiente
contiene el mismo número de nodos negros.
•No hay dos nodos rojos adyacentes en un camino.
1
Una inserción en un árbol rojo-negro se hace como en cualquier árbol
binario, pero el nodo insertado será siempre rojo. Luego se reajustan
los colores de los nodos descendientes para reestablecerlas
propiedades del árbol.
Conoceremos Z como el nodo nuevo a insertar.
Caso 3: El tío de Z es negro y Z es hijo izquierdo.
Como Z y su padre son rojos, se hace una rotación derecha, de
modo que coloreamos al padre de Z de negro y al abuelo de Z
de rojo, de modo que la nueva raíz del subárbol es el padre de
Z, cuyo hijo izquierdo es Z e hijo derecho el abuelo de Z.
Caso 1: Si el tío de Z es rojo.
Como el abuelo de Z es negro, podemos colorear de negro al
padre y al tío de Z y de rojo al abuelo.
Caso 2: El tío de Z es negro y Z es hijo derecho.
Se
e usa una rotación a la izquierda para convertirlo al caso 3, en
el que Z es hijo izquierdo.
La eliminación de un nodo, por otro lado, requiere de algunas
consideraciones adicionales a las de un árbol binario común. El proceso
de bajas utiliza una estructura especial llamada “centinela".Esta es un
objeto con la misma estructura de un nodo del árbol y siempre es de
color negro. En lugar de que los apuntadores nulos sean 'NULL' estos
apuntarán al centinela.
•Introduction to Algorithms, second edition
•Thomas Cormen
•McGraw Hill
•Estructura de datos en C/C++, segunda edición
•Aaron Tenenbaum
•Prentice Hall
•http://mailweb.udlap.mx/~ingrid/clases/arboles.html
2
Descargar