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