Este documento describe las propiedades y operaciones de un árbol rojo-negro. Un árbol rojo-negro es un árbol binario de búsqueda balanceado donde cada nodo tiene un color rojo o negro. Esto garantiza que la altura del árbol sea O(log n). Las inserciones y eliminaciones requieren rotaciones y cambios de color para mantener las propiedades del árbol rojo-negro.
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
Árbol Rojo-Negro: Propiedades y Operaciones
1. Unefa – Núcleo Mérida Programación III 2019
Doniel Acosta C.I 25.237.858
Orfa Villarreal C.I 18.965.007
Génessis Dávila C.I 24.584.745
Informe Árbol Rojo-Negro
Un árbol rojo negro es un árbol binario de búsqueda que garantiza Altura O(log n)
cuando almacena n elementos Adicional a los apuntadores para los hijos y el
padre, los nodos tiene asociado 1 bit de color También se utiliza un nodo sentinela
nil tal que el papa de la raíz es el centinela, así como los hijos de las hojas, y uno
de los hijos de los Nodos internos que tienen un único hijo.
Un árbol Rojo-Negro es un árbol binario en el que cada nodo tiene un color como
atributo extra, ya sea rojo o negro. El color de los nodos asegura que la trayectoria
más larga de la raíz a una hoja no es más larga que el doble del largo de la más
corta. Esto significa que el árbol está fuertemente balanceado.
Un árbol Rojo-Negro debe satisfacer estas propiedades:
La raíz siempre es negra.
Los nodo hoja nulo son nodo negros.
Si el nodo es rojo, sus hijos serán negros.
Para cada nodo, todos los caminos desde el nodo hasta la hoja deben de
tener la misma cantidad de nodos negros.
Ningún camino desde la raíz a las hojas tiene dos o tres hijos rojos
consecutivos
El recorrido pasa por el número máximo de nodos, nunca puede pasar por
más del doble de nodos que se recorren por el recorrido que pasa por el
mismo número de nodos.
Inserción
Las inserciones se hacen de manera similar a las inserciones en un árbol
binario de búsqueda
primero se busca en donde realizar la inserción
segundo, el nodo z se inserta a nivel de las hojas y se pinta de rojo
luego, de ser necesario, se pintan y se hacen rotaciones sobre los
ancestros de z para restablecer las propiedades (Los nodo hoja nulo son
nodo negros. Para cada nodo, todos los caminos desde el nodo hasta la hoja
deben de tener la misma cantidad de nodos negros.)
Eliminación
2. Similar a la inserción, la eliminación se basa en la eliminación de nodos para
arboles binarios de búsqueda
La eliminación recibe un apuntador al nodo z que se quiere eliminar
Como lo hicimos en arboles binarios de búsqueda, usamos una rutina de
trasplante de nodos
Rotaciones
Operación fundamental para balancear el _árbol durante inserciones y
Eliminaciones. Existen rotaciones a la izquierda y a la derecha:
En una rotación a la derecha con pivote x se asume x: left !=nil
En una rotación a la izquierda con pivote x se asume x:right != nil
Como se dijo antes, se asume que el padre de la raíz es nil
def reRooteo(self):
while self.raiz.padre!=ARN.Nulo:
#Reacomodar raiz
self.raiz=self.raiz.padre
def inorder(self, p='root'):
if p=='root': p=self.raiz
if p == ARN.Nulo or not p:
return
self.inorder(p.izq)
print (p.dato, ('negro' if p.negro else
'rojo'))
self.inorder(p.der)
Bibliografia
https://www.google.com/search?q=ci2612-lec18&oq=ci2612-
lec18&aqs=chrome..69i57.5557j0j7&sourceid=chrome&ie=UTF-8
ingsistemas.ufps.edu.co/SEED/arbolrojinegro.html