SlideShare una empresa de Scribd logo
Tecnológico de Costa Rica
Jeffrey Camareno
Sergio Sánchez
Xavier Vega
2013
• Un árbol rojo-negro es un tipo abstracto de datos.
Concretamente, es un árbol binario de búsqueda
equilibrado, una estructura de datos utilizada
en informática y ciencias de la computación.
• Es complejo, pero tiene un buen peor caso de tiempo de
ejecución para sus operaciones y es eficiente en la
práctica. Puede buscar, insertar y borrar en un tiempo
O(log n), donde n es el número de elementos del árbol.
• La estructura original fue creada por Rudolf
Bayer en 1972, que le dio el nombre de “árbolesB binarios simétricos”, pero tomó su nombre moderno en
un trabajo de Leo J. Guibas y Robert
Sedgewick realizado en 1978.
• Los árboles rojo-negro ofrecen un peor
caso con tiempo garantizado para la
inserción, el borrado y la búsqueda. No es
esto únicamente lo que los hace valiosos
en aplicaciones sensibles al tiempo como
las aplicaciones en tiempo real, sino que
además son apreciados para la
construcción de bloques en otras
estructuras de datos que garantizan un
peor caso. Por ejemplo, muchas
estructuras de datos usadas en geometría
computacional pueden basarse en árboles
• Los árboles rojo-negro son
particularmente valiosos
en programación funcional, donde son
una de las estructuras de
datos persistentes más comúnmente
utilizadas en la construcción de arrays
asociativos y conjuntos que pueden
retener versiones previas tras
mutaciones. La versión persistente del
árbol rojo-negro requiere un espacio
O(log n) para cada inserción o
• Un árbol rojo-negro es un árbol binario de búsqueda en
el que cada nodo tiene un atributo de color cuyo valor
es rojo o negro. En adelante, se dice que un nodo es
rojo o negro haciendo referencia a dicho atributo.
• Además de los requisitos impuestos a los árboles
binarios de búsqueda convencionales, se deben
satisfacer las siguientes reglas para tener un árbol rojonegro válido:
• Todo nodo es o bien rojo o bien negro.
• La raíz es negra.
• Todas las hojas (NIL) son negras.
• Todo nodo rojo debe tener dos nodos hijos negros.
• Cada camino desde un nodo dado a sus hojas
descendientes contiene el mismo número de nodos
negros.
• Estas reglas producen una características producen una
regla crucial para los árboles rojo-negro: el camino más
largo desde la raíz hasta una hoja no es más largo que
dos veces el camino más corto desde la raíz a una hoja.
El resultado es que dicho árbol está aproximadamente
equilibrado.
•
•
•
•

Todo nodo es o bien rojo o bien negro.
La raíz es negra.
Todas las hojas son negras.
Todo nodo rojo debe tener dos nodos hijos
negros.
• Cada camino desde un nodo dado a sus
hojas descendientes contiene el mismo
número de nodos negros
• Rotación
• Búsqueda
• Inserción
• Eliminación
• Para conservar las propiedades que debe
cumplir todo árbol rojo-negro, en ciertos casos de
la inserción y la eliminación será necesario
reestructurar el árbol, si bien no debe perderse la
ordenación relativa de los nodos. Para ello, se
llevan a cabo una o varias rotaciones, que no
son más que reestructuraciones en las
relaciones padre-hijo-tío-nieto.
• Las rotaciones que se consideran a continuación son
simples; sin embargo, también se dan las rotaciones
dobles.
• En las imágenes pueden verse de forma simplificada
cómo se llevan a cabo las rotaciones simples hacia la
izquierda y hacia la derecha en cualquier árbol binario de
búsqueda, en particular en cualquier árbol rojo-negro.
Podemos ver también la implementación en C de dichas
operaciones.
void rotar_izda(struct node *p) {
struct node **aux=&raiz;
if(p->padre!=NULL && p->padre->dcho==p) aux=&(p->padre->dcho);
else if(p->padre!=NULL && p->padre->izdo==p) aux=&(p->padre>izdo);
*aux=p->dcho; (*aux)->padre=p->padre;
p->padre=*aux;
p->dcho=(*aux)->izdo; (*aux)->izdo=p;
if(p->dcho!=NULL) p->dcho->padre=p;
}
void rotar_dcha(struct node *p) {
struct node **aux=&raiz;
if(p->padre!=NULL && p->padre->dcho==p)
aux=&(p->padre->dcho);
else if(p->padre!=NULL && p->padre->izdo==p)
aux=&(p->padre->izdo);
*aux=p->izdo; (*aux)->padre=p->padre;
p->padre=*aux; p->izdo=(*aux)->dcho;
(*aux)->dcho=p;
if(p->izdo!=NULL) p->izdo->padre=p;
}
• La búsqueda consiste acceder a la raíz del árbol y
comparar su valor con el valor buscado. Si el elemento a
localizar coincide con el de la raíz, la búsqueda ha
concluido con éxito. Si el elemento es menor, se busca
en el subárbol izquierdo; si es mayor, en el derecho. Si se
alcanza un nodo hoja y el elemento no ha sido
encontrado se supone que no existe en el árbol. Cabe
destacar que la búsqueda en este tipo de árboles es muy
eficiente y representa una función logarítmica. La
búsqueda de un elemento en un ABB (Árbol Binario de
Búsqueda) en general, y en un árbol rojo-negro en
particular, se puede realizar de dos formas: iterativa y
recursiva.
• TipoDato buscar_abb_iterativo(Abb a, TipoValor
buscado){
• TipoDato e = NULL; Abb p = a;
• while (!estaVacio(p) && (p->valor != buscado) ){
• if (buscado < p->valor) p = p->izquierda;
• if (p->valor < buscado) p = p->derecha; }
• if (!estaVacio(p)) e = copiaDato(p->dato); return e; }
• La inserción comienza añadiendo el nodo como lo
haríamos en un árbol binario de búsqueda convencional
y pintándolo de rojo. Lo que sucede después depende
del color de otros nodos cercanos. El término tío
nodo será usado para referenciar al hermano del padre
de un nodo, como en los árboles familiares humanos.
Conviene notar que:
• La propiedad 3 (Todas las hojas, incluyendo las nulas,
son negras) siempre se cumple.
• La propiedad 4 (Ambos hijos de cada nodo rojo son
negros) está amenazada solo por añadir un nodo rojo,
por repintar un nodo negro de color rojo o por una
rotación.
• La propiedad 5 (Todos los caminos desde un nodo dado
hasta sus nodos hojas contiene el mismo número de
nodos negros) está amenazada solo por repintar un nodo
• Al contrario de lo que sucede en otros árboles como
puede ser el Árbol AVL, en cada inserción se realiza un
máximo de una rotación, ya sea simple o doble. Por otra
parte, se asegura un tiempo de re-coloración máximo
de por cada inserción.
• Nota: En los esquemas que acompañan a los algoritmos,
la etiqueta N será utilizada por el nodo que está siendo
insertado, P para los padres del nodo N, G para los
abuelos del nodo N, y Upara los tíos del nodo N.
Notamos que los roles y etiquetas de los nodos están
intercambiados entre algunos casos, pero en cada caso,
toda etiqueta continúa representando el mismo nodo que
representaba al comienzo del caso. Cualquier color
mostrado en el diagrama está o bien supuesto en el caso
o implicado por dichas suposiciones.
Los nodos tío y abuelo pueden ser encontrados por las
siguientes funciones:
• En un árbol binario de búsqueda normal, cuando se borra un nodo con
dos nodos internos como hijos, tomamos el máximo elemento del
subárbol izquierdo o el mínimo del subárbol derecho, y movemos su
valor al nodo que es borrado. Borramos entonces el nodo del que
copiábamos el valor que debe tener menos de dos nodos no hojas por
hijos. Copiar un valor no viola ninguna de las propiedades rojo-negro y
reduce el problema de borrar en general al de borrar un nodo con
como mucho un hijo no hoja. No importa si este nodo es el nodo que
queríamos originalmente borrar o el nodo del que copiamos el valor.
• Resumiendo, podemos asumir que borramos un nodo con como
mucho un hijo no hoja (si solo tiene nodos hojas por hijos, tomaremos
uno de ellos como su hijo). Si borramos un nodo rojo, podemos
simplemente reemplazarlo con su hijo, que debe ser negro. Todos los
caminos hasta el nodo borrado simplemente pasarán a través de un
nodo rojo menos, y ambos nodos, el padre del borrado y el hijo, han
de ser negros, así que las propiedades 3 (todas las hojas, incluyendo
las nulas, son negras) y 4 (los dos hijos de cada nodo rojo son negros)
se mantienen. Otro caso simple es cuando el nodo borrado es negro y
su hijo es rojo. Simplemente eliminar un nodo negro podría romper las
propiedades 4 (los dos hijos de cada nodo rojo son negros) y 5 (todos
los caminos desde un nodo dado hasta sus hojas contienen el mismo
número de nodos negros), pero si repintamos su hijo de negro, ambas
propiedades quedan preservadas.
• El caso complejo es cuando el nodo que va a ser
borrado y su hijo son negros. Empezamos por
reemplazar el nodo que va a ser borrado con su hijo.
Llamaremos a este hijo (en su nueva posición) N, y su
hermano (el otro hijo de su nuevo padre) S. En los
diagramas de debajo, usaremos P para el nuevo padre
de N, SL para el hijo izquierdo de S, y SR para el nuevo
hijo derecho de S (se puede mostrar que S no puede ser
una hoja).
• Nota: Entre algunos casos cambiamos roles y etiquetas
de los nodos, pero en cada caso, toda etiqueta sigue
representando al mismo nodo que representaba al
comienzo del caso. Cualquier color mostrado en el
diagrama es o bien supuesto en su caso o bien
implicado por dichas suposiciones. El blanco representa
un color desconocido (o bien rojo o bien negro).El
cumplimiento de estas reglas en un árbol con n nodos,
• Caso 1: N es la nueva raíz. En este caso, hemos
acabado. Borramos un nodo negro de cada camino y la
nueva raíz es negra, así las propiedades se cumplen.
Una posible implementación en el lenguaje de
programación C sería la siguiente:
void eliminar_caso1(struct node *n) {
if (n->padre!= NULL)
eliminar_caso2(n); }
• Caso 2: S es rojo. En este caso invertimos los colores
de P y S, por lo que rotamos a la izquierda P, pasando S a
ser el abuelo de N. Nótese que P tiene que ser negro al
tener un hijo rojo. Aunque todos los caminos tienen
todavía el mismo número de nodos negros, ahoraN tiene
un hermano negro y un padre rojo, así que podemos
proceder a al paso 4, 5 o 6 (este nuevo hermano es negro
porque éste era uno de los hijos de S, que es rojo). En
casos posteriores, reetiquetaremos el nuevo hermano
de N como S. Aquí podemos ver una implementación:
void eliminar_caso2(struct node *n) { struct node *hm =
hermano(n);
if (hm->color == ROJO) { n->padre->color = ROJO;
hm->color = NEGRO;
if (n == n->padre->izdo) rotar_izda(n->padre);
else rotar_dcha(n->padre); }
eliminar_caso3(n); }
• Caso 3: P, S y los hijos de S son negros. En este caso,
simplemente cambiamos S a rojo. El resultado es que
todos los caminos a través de S, precisamente aquellos
que no pasan por N, tienen un nodo negro menos. El
hecho de borrar el padre original de N haciendo que todos
los caminos que pasan por N tengan un nodo negro
menos nivela el árbol. Sin embargo, todos los caminos a
través de P tienen ahora un nodo negro menos que los
caminos que no pasan por P, así que la propiedad 5 aún
no se cumple (todos los caminos desde cualquier nodo a
su nodo hijo contienen el mismo número de nodos
negros). Para corregir esto, hacemos el proceso de
reequilibrio en P, empezando en el caso 1. Su
implementación en C:
• void eliminar_caso3(struct node *n) { struct node *hm =
hermano_menor(n); if ((n->padre->color == NEGRO) &&
(hm->color == NEGRO) && (hm->izdo->color == NEGRO)
&& (hm->dcho->color == NEGRO)) { hm->color = ROJO;
• Caso 4: S y los hijos de éste son negros, pero P es rojo.
En este caso, simplemente intercambiamos los colores
de S y P. Esto no afecta al número de nodos negros en los
caminos que no van a través de S, pero añade uno al
número de nodos negros a los caminos que van a través
de N, compensando así el borrado del nodo negro en
dichos caminos. Si lo implementamos en C, quedaría:
void eliminar_caso4(struct node *n) {
struct node *hm = hermano_menor(n);
if ((n->padre->color == ROJO) && (hm->color == NEGRO)
&& (hm->izdo->color == NEGRO) && (hm->dcho->color ==
NEGRO)) {
hm->color = ROJO;
n->padre->color = NEGRO; }
else eliminar_caso5(n); }
• Caso 5: S es negro, su hijo izquierdo es rojo, el derecho
es negro, y N es el hijo izquierdo de su padre. En este
caso rotamos a la derecha S, así su hijo izquierdo se
convierte en su padre y en el hermano de N. Entonces
intercambiamos los colores de S y su nuevo padre. Todos
los caminos tienen aún el mismo número de nodos
negros, pero ahora N tiene un hermano negro cuyo hijo
derecho es rojo, así que caemos en el caso 6. Ni Nni su
padre son afectados por esta transformación (de nuevo,
por el caso 6, reetiquetamos el nuevo hermano
de N como S). He aquí la implementación en C:
void eliminar_caso5(struct node *n) { struct node *hm =
hermano(n); if ((n == n->padre->izdo) && (hm->color ==
NEGRO) && (hm->izdo->color == ROJO) && (hm->dcho>color == NEGRO)) { hm->color = ROJO; hm->izdo->color
= NEGRO; rotar_dcha(hm); } else if ((n == n->padre>dcho) && (hm->color == NEGRO) && (hm->dcho->color
== ROJO) && (hm->izdo->color == NEGRO)) { hm->color
= ROJO; hm->dcho->color = NEGRO; rotar_izda(hm); }
• Caso 6: S es negro, su hijo derecho es rojo, y N es el hijo izquierdo
de P, su padre. En este caso rotamos a la izquierda P, así que S se
convierte en el padre de P y éste en el hijo derecho de S. Entonces
intercambiamos los colores de P y S, y ponemos el hijo derecho
de Sen negro. El subárbol aún tiene el mismo color que su raíz, así
que las propiedades 4 (los hijos de todo nodo rojo son negros) y 5
(todos los caminos desde cualquier nodo a sus nodos hoja contienen
el mismo número de nodos negros) se verifican. Sin embargo, N tiene
ahora un antecesor negro mas: o bien P se ha convertido en negro, o
bien era negro y S se ha añadido como un abuelo negro. De este
modo, los caminos que pasan por N pasan por un nodo negro mas.
Mientras tanto, si un camino no pasa por N, entonces hay dos
posibilidades:
• Éste pasa a través del nuevo hermano de N. Entonces, éste debe
pasar por S y P, al igual que antes, y tienen sólo que intercambiar los
colores. Así los caminos contienen el mismo número de nodos negros.
• Éste pasa por el nuevo tío de N, el hijo derecho de S. Éste
anteriormente pasaba por S, su padre y su hijo derecho, pero ahora
sólo pasa por S, el cual ha tomado el color de su anterior padre, y por
su hijo derecho, el cual ha cambiado de rojo a negro. El efecto final es
que este camino va por el mismo número de nodos negros.
• De cualquier forma, el número de nodos negros en dichos caminos no
cambia. De este modo, hemos restablecido las propiedades 4 (los
hijos de todo nodo rojo son negros) y 5 (todos los caminos desde
cualquier nodo a sus nodos hoja contienen el mismo número de nodos
negros). El nodo blanco en diagrama puede ser rojo o negro, pero
•
•
•
•
•
•
•
•
•
•
•

void eliminar_caso6(struct node *n) {
struct node *hm = hermano(n);
hm->color = n->padre->color; n->padre->color = NEGRO;
if (n == n->padre->izdo) {
/* * Aquí, hm->dcho->color == ROJO.
*/ hm->dcho->color = NEGRO;
rotar_izda(n->padre); } else {
/* * Aquí, hm->izdo->color == ROJO.
*/ hm->izdo->color = NEGRO;
rotar_dcha(n->padre);
}}
• Un árbol rojo-negro que contiene n nodos internos tiene una altura de
O(log(n)).
• Hagamos los siguientes apuntes sobre notación:
• H(v) = altura del árbol cuya raíz es el nodo v.
• bh(v) = número de nodos negros (sin contar v si es negro)
desde v hasta cualquier hoja del subárbol (llamado altura-negra).
•
Lema: Un subárbol enraizado al nodo v tiene al menos nodos
internos.
• Demostración del lema (por inducción sobre la altura):
• Caso base: h(v)=0 Si v tiene altura cero entonces debe ser árbol
vacío, por tanto bh(v)=0. Luego:
• Hipótesis de Inducción: si v es tal que h(v) = k y contiene nodos
internos, veamos que esto implica que tal que h() = k+1
contiene nodos internos.
• Si tiene h() > 0 entonces es un nodo interno. Como éste tiene dos
hijos que tienen altura-negra, o bh() o bh()-1 (dependiendo si es rojo
o negro). Por la hipótesis de inducción cada hijo tiene al
• Usando este lema podemos mostrar que la altura del árbol
es algorítmica. Puesto que al menos la mitad de los nodos
en cualquier camino desde la raíz hasta una hoja negra
(propiedad 4 de un árbol rojo-negro), la altura-negra de la
raíz es al menos h(raíz)/2. Por el lema tenemos que:
• Por tanto, la altura de la raíz es O(log(n)).
http://www.ece.uc.edu/~franco/C321/html/RedBlac
k/
http://www.youtube.com/watch?v=vDHFF4wjW
YU
• http://arbolescplusplus.wordpress.com/category/uncateg
orized/arboles-rojo-y-negro/
• http://www.infor.uva.es/~cvaca/asigs/doceda/rojonegro.p
df
• http://es.wikipedia.org/wiki/%C3%81rbol_rojo-negro

Más contenido relacionado

La actualidad más candente

áRbol 2 3
áRbol 2 3áRbol 2 3
áRbol 2 3
Hericson Rondon
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
Franklin Parrales Bravo
 
Normalizaciòn
NormalizaciònNormalizaciòn
Normalizaciònomarzon
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binarios
Julises Garín Catalán
 
Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
Angel Vázquez Patiño
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
Alvaro Enrique Ruano
 
Avl tree detailed
Avl tree detailedAvl tree detailed
Avl tree detailed
Dr Sandeep Kumar Poonia
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
Alvaro Enrique Ruano
 
Ordenar arreglos en java
Ordenar arreglos en javaOrdenar arreglos en java
Ordenar arreglos en java
eccutpl
 
Presentacion arbol-binario
Presentacion arbol-binarioPresentacion arbol-binario
Presentacion arbol-binario
Mariela Cabezas
 
Arboles En Estructura de Datos
Arboles En Estructura de DatosArboles En Estructura de Datos
Arboles En Estructura de Datos
DARKGIRL93
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
Daniel Gomez Jaramillo
 
Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacenciaFrank Doria
 
4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo
Fernando Solis
 
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad RelacionFundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
José Antonio Sandoval Acosta
 
C11.1. árboles
C11.1. árbolesC11.1. árboles
C11.1. árboles
Carlos Miranda
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Arboles b+ de prefijos simples
Arboles b+ de prefijos simplesArboles b+ de prefijos simples
Arboles b+ de prefijos simples
Krytor
 

La actualidad más candente (20)

áRbol 2 3
áRbol 2 3áRbol 2 3
áRbol 2 3
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
 
Normalizaciòn
NormalizaciònNormalizaciòn
Normalizaciòn
 
ARBOLES BINARIOS
ARBOLES BINARIOSARBOLES BINARIOS
ARBOLES BINARIOS
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binarios
 
Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Avl tree detailed
Avl tree detailedAvl tree detailed
Avl tree detailed
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Árbol rojo-negro
Árbol rojo-negroÁrbol rojo-negro
Árbol rojo-negro
 
Ordenar arreglos en java
Ordenar arreglos en javaOrdenar arreglos en java
Ordenar arreglos en java
 
Presentacion arbol-binario
Presentacion arbol-binarioPresentacion arbol-binario
Presentacion arbol-binario
 
Arboles En Estructura de Datos
Arboles En Estructura de DatosArboles En Estructura de Datos
Arboles En Estructura de Datos
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
 
Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacencia
 
4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo
 
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad RelacionFundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
 
C11.1. árboles
C11.1. árbolesC11.1. árboles
C11.1. árboles
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Arboles b+ de prefijos simples
Arboles b+ de prefijos simplesArboles b+ de prefijos simples
Arboles b+ de prefijos simples
 

Similar a Árboles Rojo - Negro

Arboles rojonegros.pptx
Arboles rojonegros.pptxArboles rojonegros.pptx
Arboles rojonegros.pptx
JulianHernandez858831
 
TEC- Árboles R-B Pablo,Cristiam, Luis, Barnum
TEC- Árboles R-B Pablo,Cristiam, Luis, BarnumTEC- Árboles R-B Pablo,Cristiam, Luis, Barnum
TEC- Árboles R-B Pablo,Cristiam, Luis, Barnum
Pablo Camacho
 
Arn doniel acosta
Arn doniel acostaArn doniel acosta
Arn doniel acosta
Doniel Acosta
 
04 curso-prope-py ed-arboles
04 curso-prope-py ed-arboles04 curso-prope-py ed-arboles
04 curso-prope-py ed-arbolesAarón Jiménez
 
1 árbol
1 árbol1 árbol
1 árbol
Eliezer Cordova
 
Árboles binarios
Árboles binariosÁrboles binarios
Árboles binarios
Cecilia Loeza
 
Programacion estructura de arboles en c
Programacion estructura de arboles en cProgramacion estructura de arboles en c
Programacion estructura de arboles en cJessica Suarez
 
Arbol Rojo y Negro
Arbol Rojo y NegroArbol Rojo y Negro
Arbol Rojo y Negro
Brighite Perez
 
Arboles.pdf
Arboles.pdfArboles.pdf
Arboles.pdf
gabrielarauz3
 
Arboles
ArbolesArboles
Seudocodigo arbol
Seudocodigo arbolSeudocodigo arbol
Seudocodigo arbol
Carlos Raul Chazarreta
 
Sustentacion arboles
Sustentacion arbolesSustentacion arboles
Sustentacion arbolesrafyel2000
 
Unidad 6
Unidad 6Unidad 6
Unidad 6
Angeles Quezada
 
Para leer estructuras
Para leer estructurasPara leer estructuras
Para leer estructurasVana Cigarroa
 
Para leer estructuras
Para leer estructurasPara leer estructuras
Para leer estructurasVana Cigarroa
 
Arboles ppt
Arboles pptArboles ppt
Arboles pptINFOP
 

Similar a Árboles Rojo - Negro (20)

Arboles rojonegros.pptx
Arboles rojonegros.pptxArboles rojonegros.pptx
Arboles rojonegros.pptx
 
TEC- Árboles R-B Pablo,Cristiam, Luis, Barnum
TEC- Árboles R-B Pablo,Cristiam, Luis, BarnumTEC- Árboles R-B Pablo,Cristiam, Luis, Barnum
TEC- Árboles R-B Pablo,Cristiam, Luis, Barnum
 
Arn doniel acosta
Arn doniel acostaArn doniel acosta
Arn doniel acosta
 
04 curso-prope-py ed-arboles
04 curso-prope-py ed-arboles04 curso-prope-py ed-arboles
04 curso-prope-py ed-arboles
 
1 árbol
1 árbol1 árbol
1 árbol
 
Árboles binarios
Árboles binariosÁrboles binarios
Árboles binarios
 
Arboles
ArbolesArboles
Arboles
 
Programacion estructura de arboles en c
Programacion estructura de arboles en cProgramacion estructura de arboles en c
Programacion estructura de arboles en c
 
áRboles binarios
áRboles binariosáRboles binarios
áRboles binarios
 
áRboles binarios
áRboles binariosáRboles binarios
áRboles binarios
 
Arbol Rojo y Negro
Arbol Rojo y NegroArbol Rojo y Negro
Arbol Rojo y Negro
 
Arboles.pdf
Arboles.pdfArboles.pdf
Arboles.pdf
 
Arboles
ArbolesArboles
Arboles
 
Seudocodigo arbol
Seudocodigo arbolSeudocodigo arbol
Seudocodigo arbol
 
Arboles
Arboles Arboles
Arboles
 
Sustentacion arboles
Sustentacion arbolesSustentacion arboles
Sustentacion arboles
 
Unidad 6
Unidad 6Unidad 6
Unidad 6
 
Para leer estructuras
Para leer estructurasPara leer estructuras
Para leer estructuras
 
Para leer estructuras
Para leer estructurasPara leer estructuras
Para leer estructuras
 
Arboles ppt
Arboles pptArboles ppt
Arboles ppt
 

Último

Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdfTexto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
ClaudiaAlcondeViadez
 
El lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libroEl lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libro
Distea V región
 
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNETPRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
CESAR MIJAEL ESPINOZA SALAZAR
 
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de MadridHorarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
20minutos
 
Mapa_Conceptual de los fundamentos de la evaluación educativa
Mapa_Conceptual de los fundamentos de la evaluación educativaMapa_Conceptual de los fundamentos de la evaluación educativa
Mapa_Conceptual de los fundamentos de la evaluación educativa
TatianaVanessaAltami
 
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptxSemana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
LorenaCovarrubias12
 
INFORME MINEDU DEL PRIMER SIMULACRO 2024.pdf
INFORME MINEDU DEL PRIMER SIMULACRO 2024.pdfINFORME MINEDU DEL PRIMER SIMULACRO 2024.pdf
INFORME MINEDU DEL PRIMER SIMULACRO 2024.pdf
Alejandrogarciapanta
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Monseespinoza6
 
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
20minutos
 
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptxAutomatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
GallardoJahse
 
Fase 3; Estudio de la Geometría Analítica
Fase 3; Estudio de la Geometría AnalíticaFase 3; Estudio de la Geometría Analítica
Fase 3; Estudio de la Geometría Analítica
YasneidyGonzalez
 
Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...
Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...
Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...
AracelidelRocioOrdez
 
Portafolio de servicios Centro de Educación Continua EPN
Portafolio de servicios Centro de Educación Continua EPNPortafolio de servicios Centro de Educación Continua EPN
Portafolio de servicios Centro de Educación Continua EPN
jmorales40
 
Conocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del ArrabalConocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del Arrabal
Profes de Relideleón Apellidos
 
Testimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdfTestimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdf
Txema Gs
 
Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1
MauricioSnchez83
 
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIACONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
BetzabePecheSalcedo1
 
El fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxEl fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docx
Alejandrino Halire Ccahuana
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
El Fortí
 
HABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdf
HABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdfHABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdf
HABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdf
DIANADIAZSILVA1
 

Último (20)

Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdfTexto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
 
El lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libroEl lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libro
 
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNETPRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
 
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de MadridHorarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
 
Mapa_Conceptual de los fundamentos de la evaluación educativa
Mapa_Conceptual de los fundamentos de la evaluación educativaMapa_Conceptual de los fundamentos de la evaluación educativa
Mapa_Conceptual de los fundamentos de la evaluación educativa
 
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptxSemana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
 
INFORME MINEDU DEL PRIMER SIMULACRO 2024.pdf
INFORME MINEDU DEL PRIMER SIMULACRO 2024.pdfINFORME MINEDU DEL PRIMER SIMULACRO 2024.pdf
INFORME MINEDU DEL PRIMER SIMULACRO 2024.pdf
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
 
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
 
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptxAutomatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
 
Fase 3; Estudio de la Geometría Analítica
Fase 3; Estudio de la Geometría AnalíticaFase 3; Estudio de la Geometría Analítica
Fase 3; Estudio de la Geometría Analítica
 
Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...
Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...
Septima-Sesion-Ordinaria-del-Consejo-Tecnico-Escolar-y-el-Taller-Intensivo-de...
 
Portafolio de servicios Centro de Educación Continua EPN
Portafolio de servicios Centro de Educación Continua EPNPortafolio de servicios Centro de Educación Continua EPN
Portafolio de servicios Centro de Educación Continua EPN
 
Conocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del ArrabalConocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del Arrabal
 
Testimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdfTestimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdf
 
Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1
 
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIACONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
CONCLUSIONES-DESCRIPTIVAS NIVEL PRIMARIA
 
El fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docxEl fundamento del gobierno de Dios. Lec. 09. docx
El fundamento del gobierno de Dios. Lec. 09. docx
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
 
HABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdf
HABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdfHABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdf
HABILIDADES MOTRICES BASICAS Y ESPECIFICAS.pdf
 

Árboles Rojo - Negro

  • 1. Tecnológico de Costa Rica Jeffrey Camareno Sergio Sánchez Xavier Vega 2013
  • 2. • Un árbol rojo-negro es un tipo abstracto de datos. Concretamente, es un árbol binario de búsqueda equilibrado, una estructura de datos utilizada en informática y ciencias de la computación. • Es complejo, pero tiene un buen peor caso de tiempo de ejecución para sus operaciones y es eficiente en la práctica. Puede buscar, insertar y borrar en un tiempo O(log n), donde n es el número de elementos del árbol.
  • 3. • La estructura original fue creada por Rudolf Bayer en 1972, que le dio el nombre de “árbolesB binarios simétricos”, pero tomó su nombre moderno en un trabajo de Leo J. Guibas y Robert Sedgewick realizado en 1978.
  • 4. • Los árboles rojo-negro ofrecen un peor caso con tiempo garantizado para la inserción, el borrado y la búsqueda. No es esto únicamente lo que los hace valiosos en aplicaciones sensibles al tiempo como las aplicaciones en tiempo real, sino que además son apreciados para la construcción de bloques en otras estructuras de datos que garantizan un peor caso. Por ejemplo, muchas estructuras de datos usadas en geometría computacional pueden basarse en árboles
  • 5. • Los árboles rojo-negro son particularmente valiosos en programación funcional, donde son una de las estructuras de datos persistentes más comúnmente utilizadas en la construcción de arrays asociativos y conjuntos que pueden retener versiones previas tras mutaciones. La versión persistente del árbol rojo-negro requiere un espacio O(log n) para cada inserción o
  • 6. • Un árbol rojo-negro es un árbol binario de búsqueda en el que cada nodo tiene un atributo de color cuyo valor es rojo o negro. En adelante, se dice que un nodo es rojo o negro haciendo referencia a dicho atributo.
  • 7. • Además de los requisitos impuestos a los árboles binarios de búsqueda convencionales, se deben satisfacer las siguientes reglas para tener un árbol rojonegro válido: • Todo nodo es o bien rojo o bien negro. • La raíz es negra. • Todas las hojas (NIL) son negras. • Todo nodo rojo debe tener dos nodos hijos negros. • Cada camino desde un nodo dado a sus hojas descendientes contiene el mismo número de nodos negros.
  • 8. • Estas reglas producen una características producen una regla crucial para los árboles rojo-negro: el camino más largo desde la raíz hasta una hoja no es más largo que dos veces el camino más corto desde la raíz a una hoja. El resultado es que dicho árbol está aproximadamente equilibrado.
  • 9. • • • • Todo nodo es o bien rojo o bien negro. La raíz es negra. Todas las hojas son negras. Todo nodo rojo debe tener dos nodos hijos negros. • Cada camino desde un nodo dado a sus hojas descendientes contiene el mismo número de nodos negros
  • 10.
  • 11. • Rotación • Búsqueda • Inserción • Eliminación
  • 12. • Para conservar las propiedades que debe cumplir todo árbol rojo-negro, en ciertos casos de la inserción y la eliminación será necesario reestructurar el árbol, si bien no debe perderse la ordenación relativa de los nodos. Para ello, se llevan a cabo una o varias rotaciones, que no son más que reestructuraciones en las relaciones padre-hijo-tío-nieto.
  • 13. • Las rotaciones que se consideran a continuación son simples; sin embargo, también se dan las rotaciones dobles. • En las imágenes pueden verse de forma simplificada cómo se llevan a cabo las rotaciones simples hacia la izquierda y hacia la derecha en cualquier árbol binario de búsqueda, en particular en cualquier árbol rojo-negro. Podemos ver también la implementación en C de dichas operaciones.
  • 14.
  • 15. void rotar_izda(struct node *p) { struct node **aux=&raiz; if(p->padre!=NULL && p->padre->dcho==p) aux=&(p->padre->dcho); else if(p->padre!=NULL && p->padre->izdo==p) aux=&(p->padre>izdo); *aux=p->dcho; (*aux)->padre=p->padre; p->padre=*aux; p->dcho=(*aux)->izdo; (*aux)->izdo=p; if(p->dcho!=NULL) p->dcho->padre=p; }
  • 16.
  • 17. void rotar_dcha(struct node *p) { struct node **aux=&raiz; if(p->padre!=NULL && p->padre->dcho==p) aux=&(p->padre->dcho); else if(p->padre!=NULL && p->padre->izdo==p) aux=&(p->padre->izdo); *aux=p->izdo; (*aux)->padre=p->padre; p->padre=*aux; p->izdo=(*aux)->dcho; (*aux)->dcho=p; if(p->izdo!=NULL) p->izdo->padre=p; }
  • 18. • La búsqueda consiste acceder a la raíz del árbol y comparar su valor con el valor buscado. Si el elemento a localizar coincide con el de la raíz, la búsqueda ha concluido con éxito. Si el elemento es menor, se busca en el subárbol izquierdo; si es mayor, en el derecho. Si se alcanza un nodo hoja y el elemento no ha sido encontrado se supone que no existe en el árbol. Cabe destacar que la búsqueda en este tipo de árboles es muy eficiente y representa una función logarítmica. La búsqueda de un elemento en un ABB (Árbol Binario de Búsqueda) en general, y en un árbol rojo-negro en particular, se puede realizar de dos formas: iterativa y recursiva.
  • 19. • TipoDato buscar_abb_iterativo(Abb a, TipoValor buscado){ • TipoDato e = NULL; Abb p = a; • while (!estaVacio(p) && (p->valor != buscado) ){ • if (buscado < p->valor) p = p->izquierda; • if (p->valor < buscado) p = p->derecha; } • if (!estaVacio(p)) e = copiaDato(p->dato); return e; }
  • 20. • La inserción comienza añadiendo el nodo como lo haríamos en un árbol binario de búsqueda convencional y pintándolo de rojo. Lo que sucede después depende del color de otros nodos cercanos. El término tío nodo será usado para referenciar al hermano del padre de un nodo, como en los árboles familiares humanos. Conviene notar que: • La propiedad 3 (Todas las hojas, incluyendo las nulas, son negras) siempre se cumple. • La propiedad 4 (Ambos hijos de cada nodo rojo son negros) está amenazada solo por añadir un nodo rojo, por repintar un nodo negro de color rojo o por una rotación. • La propiedad 5 (Todos los caminos desde un nodo dado hasta sus nodos hojas contiene el mismo número de nodos negros) está amenazada solo por repintar un nodo
  • 21. • Al contrario de lo que sucede en otros árboles como puede ser el Árbol AVL, en cada inserción se realiza un máximo de una rotación, ya sea simple o doble. Por otra parte, se asegura un tiempo de re-coloración máximo de por cada inserción. • Nota: En los esquemas que acompañan a los algoritmos, la etiqueta N será utilizada por el nodo que está siendo insertado, P para los padres del nodo N, G para los abuelos del nodo N, y Upara los tíos del nodo N. Notamos que los roles y etiquetas de los nodos están intercambiados entre algunos casos, pero en cada caso, toda etiqueta continúa representando el mismo nodo que representaba al comienzo del caso. Cualquier color mostrado en el diagrama está o bien supuesto en el caso o implicado por dichas suposiciones. Los nodos tío y abuelo pueden ser encontrados por las siguientes funciones:
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. • En un árbol binario de búsqueda normal, cuando se borra un nodo con dos nodos internos como hijos, tomamos el máximo elemento del subárbol izquierdo o el mínimo del subárbol derecho, y movemos su valor al nodo que es borrado. Borramos entonces el nodo del que copiábamos el valor que debe tener menos de dos nodos no hojas por hijos. Copiar un valor no viola ninguna de las propiedades rojo-negro y reduce el problema de borrar en general al de borrar un nodo con como mucho un hijo no hoja. No importa si este nodo es el nodo que queríamos originalmente borrar o el nodo del que copiamos el valor. • Resumiendo, podemos asumir que borramos un nodo con como mucho un hijo no hoja (si solo tiene nodos hojas por hijos, tomaremos uno de ellos como su hijo). Si borramos un nodo rojo, podemos simplemente reemplazarlo con su hijo, que debe ser negro. Todos los caminos hasta el nodo borrado simplemente pasarán a través de un nodo rojo menos, y ambos nodos, el padre del borrado y el hijo, han de ser negros, así que las propiedades 3 (todas las hojas, incluyendo las nulas, son negras) y 4 (los dos hijos de cada nodo rojo son negros) se mantienen. Otro caso simple es cuando el nodo borrado es negro y su hijo es rojo. Simplemente eliminar un nodo negro podría romper las propiedades 4 (los dos hijos de cada nodo rojo son negros) y 5 (todos los caminos desde un nodo dado hasta sus hojas contienen el mismo número de nodos negros), pero si repintamos su hijo de negro, ambas propiedades quedan preservadas.
  • 28. • El caso complejo es cuando el nodo que va a ser borrado y su hijo son negros. Empezamos por reemplazar el nodo que va a ser borrado con su hijo. Llamaremos a este hijo (en su nueva posición) N, y su hermano (el otro hijo de su nuevo padre) S. En los diagramas de debajo, usaremos P para el nuevo padre de N, SL para el hijo izquierdo de S, y SR para el nuevo hijo derecho de S (se puede mostrar que S no puede ser una hoja). • Nota: Entre algunos casos cambiamos roles y etiquetas de los nodos, pero en cada caso, toda etiqueta sigue representando al mismo nodo que representaba al comienzo del caso. Cualquier color mostrado en el diagrama es o bien supuesto en su caso o bien implicado por dichas suposiciones. El blanco representa un color desconocido (o bien rojo o bien negro).El cumplimiento de estas reglas en un árbol con n nodos,
  • 29. • Caso 1: N es la nueva raíz. En este caso, hemos acabado. Borramos un nodo negro de cada camino y la nueva raíz es negra, así las propiedades se cumplen. Una posible implementación en el lenguaje de programación C sería la siguiente: void eliminar_caso1(struct node *n) { if (n->padre!= NULL) eliminar_caso2(n); }
  • 30. • Caso 2: S es rojo. En este caso invertimos los colores de P y S, por lo que rotamos a la izquierda P, pasando S a ser el abuelo de N. Nótese que P tiene que ser negro al tener un hijo rojo. Aunque todos los caminos tienen todavía el mismo número de nodos negros, ahoraN tiene un hermano negro y un padre rojo, así que podemos proceder a al paso 4, 5 o 6 (este nuevo hermano es negro porque éste era uno de los hijos de S, que es rojo). En casos posteriores, reetiquetaremos el nuevo hermano de N como S. Aquí podemos ver una implementación: void eliminar_caso2(struct node *n) { struct node *hm = hermano(n); if (hm->color == ROJO) { n->padre->color = ROJO; hm->color = NEGRO; if (n == n->padre->izdo) rotar_izda(n->padre); else rotar_dcha(n->padre); } eliminar_caso3(n); }
  • 31. • Caso 3: P, S y los hijos de S son negros. En este caso, simplemente cambiamos S a rojo. El resultado es que todos los caminos a través de S, precisamente aquellos que no pasan por N, tienen un nodo negro menos. El hecho de borrar el padre original de N haciendo que todos los caminos que pasan por N tengan un nodo negro menos nivela el árbol. Sin embargo, todos los caminos a través de P tienen ahora un nodo negro menos que los caminos que no pasan por P, así que la propiedad 5 aún no se cumple (todos los caminos desde cualquier nodo a su nodo hijo contienen el mismo número de nodos negros). Para corregir esto, hacemos el proceso de reequilibrio en P, empezando en el caso 1. Su implementación en C: • void eliminar_caso3(struct node *n) { struct node *hm = hermano_menor(n); if ((n->padre->color == NEGRO) && (hm->color == NEGRO) && (hm->izdo->color == NEGRO) && (hm->dcho->color == NEGRO)) { hm->color = ROJO;
  • 32. • Caso 4: S y los hijos de éste son negros, pero P es rojo. En este caso, simplemente intercambiamos los colores de S y P. Esto no afecta al número de nodos negros en los caminos que no van a través de S, pero añade uno al número de nodos negros a los caminos que van a través de N, compensando así el borrado del nodo negro en dichos caminos. Si lo implementamos en C, quedaría: void eliminar_caso4(struct node *n) { struct node *hm = hermano_menor(n); if ((n->padre->color == ROJO) && (hm->color == NEGRO) && (hm->izdo->color == NEGRO) && (hm->dcho->color == NEGRO)) { hm->color = ROJO; n->padre->color = NEGRO; } else eliminar_caso5(n); }
  • 33. • Caso 5: S es negro, su hijo izquierdo es rojo, el derecho es negro, y N es el hijo izquierdo de su padre. En este caso rotamos a la derecha S, así su hijo izquierdo se convierte en su padre y en el hermano de N. Entonces intercambiamos los colores de S y su nuevo padre. Todos los caminos tienen aún el mismo número de nodos negros, pero ahora N tiene un hermano negro cuyo hijo derecho es rojo, así que caemos en el caso 6. Ni Nni su padre son afectados por esta transformación (de nuevo, por el caso 6, reetiquetamos el nuevo hermano de N como S). He aquí la implementación en C: void eliminar_caso5(struct node *n) { struct node *hm = hermano(n); if ((n == n->padre->izdo) && (hm->color == NEGRO) && (hm->izdo->color == ROJO) && (hm->dcho>color == NEGRO)) { hm->color = ROJO; hm->izdo->color = NEGRO; rotar_dcha(hm); } else if ((n == n->padre>dcho) && (hm->color == NEGRO) && (hm->dcho->color == ROJO) && (hm->izdo->color == NEGRO)) { hm->color = ROJO; hm->dcho->color = NEGRO; rotar_izda(hm); }
  • 34. • Caso 6: S es negro, su hijo derecho es rojo, y N es el hijo izquierdo de P, su padre. En este caso rotamos a la izquierda P, así que S se convierte en el padre de P y éste en el hijo derecho de S. Entonces intercambiamos los colores de P y S, y ponemos el hijo derecho de Sen negro. El subárbol aún tiene el mismo color que su raíz, así que las propiedades 4 (los hijos de todo nodo rojo son negros) y 5 (todos los caminos desde cualquier nodo a sus nodos hoja contienen el mismo número de nodos negros) se verifican. Sin embargo, N tiene ahora un antecesor negro mas: o bien P se ha convertido en negro, o bien era negro y S se ha añadido como un abuelo negro. De este modo, los caminos que pasan por N pasan por un nodo negro mas. Mientras tanto, si un camino no pasa por N, entonces hay dos posibilidades: • Éste pasa a través del nuevo hermano de N. Entonces, éste debe pasar por S y P, al igual que antes, y tienen sólo que intercambiar los colores. Así los caminos contienen el mismo número de nodos negros. • Éste pasa por el nuevo tío de N, el hijo derecho de S. Éste anteriormente pasaba por S, su padre y su hijo derecho, pero ahora sólo pasa por S, el cual ha tomado el color de su anterior padre, y por su hijo derecho, el cual ha cambiado de rojo a negro. El efecto final es que este camino va por el mismo número de nodos negros. • De cualquier forma, el número de nodos negros en dichos caminos no cambia. De este modo, hemos restablecido las propiedades 4 (los hijos de todo nodo rojo son negros) y 5 (todos los caminos desde cualquier nodo a sus nodos hoja contienen el mismo número de nodos negros). El nodo blanco en diagrama puede ser rojo o negro, pero
  • 35. • • • • • • • • • • • void eliminar_caso6(struct node *n) { struct node *hm = hermano(n); hm->color = n->padre->color; n->padre->color = NEGRO; if (n == n->padre->izdo) { /* * Aquí, hm->dcho->color == ROJO. */ hm->dcho->color = NEGRO; rotar_izda(n->padre); } else { /* * Aquí, hm->izdo->color == ROJO. */ hm->izdo->color = NEGRO; rotar_dcha(n->padre); }}
  • 36. • Un árbol rojo-negro que contiene n nodos internos tiene una altura de O(log(n)). • Hagamos los siguientes apuntes sobre notación: • H(v) = altura del árbol cuya raíz es el nodo v. • bh(v) = número de nodos negros (sin contar v si es negro) desde v hasta cualquier hoja del subárbol (llamado altura-negra). • Lema: Un subárbol enraizado al nodo v tiene al menos nodos internos. • Demostración del lema (por inducción sobre la altura): • Caso base: h(v)=0 Si v tiene altura cero entonces debe ser árbol vacío, por tanto bh(v)=0. Luego: • Hipótesis de Inducción: si v es tal que h(v) = k y contiene nodos internos, veamos que esto implica que tal que h() = k+1 contiene nodos internos. • Si tiene h() > 0 entonces es un nodo interno. Como éste tiene dos hijos que tienen altura-negra, o bh() o bh()-1 (dependiendo si es rojo o negro). Por la hipótesis de inducción cada hijo tiene al
  • 37. • Usando este lema podemos mostrar que la altura del árbol es algorítmica. Puesto que al menos la mitad de los nodos en cualquier camino desde la raíz hasta una hoja negra (propiedad 4 de un árbol rojo-negro), la altura-negra de la raíz es al menos h(raíz)/2. Por el lema tenemos que: • Por tanto, la altura de la raíz es O(log(n)).