Professional Documents
Culture Documents
Unidad 4
Pioquinto Hugo Nava Castro
rboles
Habamos visto que se puede demostrar por induccin que en un rbol completo el
nmero de nodos totales es (2 ** h+1) 1. Esto nos indica que las cosas que se hacen en
rboles son de orden log n pero slo en el caso en que el rbol est lleno. En el peor de
los casos las cosas pueden ser lineales O(n). Cmo poder garantizar, entonces que se
mantenga un balanceo? Cada vez que debido a una insercin o eliminacin el rbol se
desbalancee, reubicar los nodos de modo que, manteniendo el invariante de un rbol de
bsqueda binaria, se trate de mantener la altura del rbol. Ej:
El primer tipo de rboles balanceados fue el AVL (Adelson Velskii Landis). No son
frecuentemente implementados, ya que hay otros mejores, pero las ideas que hay detrs
de ellos se ven en los dems tipos de rboles balanceados. Se trata de incluir otra
condicin ms en el invariante de modo de asegurar que la bsqueda sea O(log n): LO
ms simple sera requerir que para un rbol AVL la altura de su subrbol derecho sea
igual a la de su subrbil izquierdo. Recordemos que los rboles se definen
recursivanmete, por lo tanto esto se debera cumplir para cada nodo. Esto es sin
embargo muy restrictivo ya que implicara que todo rbol AVL debera ser completo
adems. La definicin de rboles AVL es entonces algo ms relajada:
Def: Un rbol AVL es un rbol binario con la propiedad adicional que para
cualquier nodo
En el rbol la altura de su subrbol izquierdo y de su subrbol derecho difieren a
lo ms en 1.
Esta condicin asegura que el rbol slo tendr altura logartmica. Para probar esto
necesitamos mostrar que un rbol de altura H tiene por lo menos C**H nodos para
alguna constante H>1. En otras palabras, si el mnimo nmero de nodos en un rbol es
en
en
en
en
el
el
el
el
subrbol
subrbol
subrbol
subrbol
Caso 1
Caso 4
Caso 2
Caso 3
Para los casos 2 y 3 de los nodos internos se hace la llamada rotacin doble (ej pag 515)
P
A
B
ARBOLES ROJO-NEGRO
Tienen la gracia de que se puede balancear mientras se va hacia abajo (no se necesita el
paso de vuelta hacia arriba por lo cual no se necesita hacerlo en forma recursiva). Como
resultado la implementacin es ms simple y rpida que el AVL. Los rojo-negro tienen
las siguientes caractersticas:
1- Cada nodo est coloreado rojo o negro
2- La raz es negra
3- Si un nodo es rojo, los hijos deben ser negros (no se permiten dos rojos seguidos en
un path)
4- Cualquier path desde la raz hasta una referencia null debe contener el mismo
nmero de nodos negros
Ver ejemplo en pg 517.
Se puede demostrar por induccin que si todo path desde la raz hasta una referencia
null tiene B nodos negros, entonces tiene que haber por lo menos (2**B)-1 nodos negros
en el rbol. Ms an, como la raz es negra y no pueden haber dos nodos consecutivos
rojos en el path, la altura de un rbol rojo-negro es a lo ms 2*log(N+1) (intercalemos un
nodo rojo en alguno de los path cada nodo negro). Consecuentemente, la bsqueda est
garantizada de ser logartmica.
Insercin, primera aproximacin: botton up
Recordemos que todo nodo nuevo se inserta como una hoja en un rbol. Si la coloreamos
negra entonces de seguro estaremos violando la propiedad 4 ya que habr un path a
una referencia null con un nodo negra ms (en realidad 2). Insertemos la hoja nueva de
color rojo. Si el padre era negro est todo bien y hasta aqu llega el problema. Si el padre
ya era rojo entonces estamos en problemas, pero con rotaciones y cambios de colores es
posible solucionar esto.
Hay varios casos a considerar (y sus espejos) si el padre era rojo:
Primero consideremos que el tio era negro o null. Si llamamos x al nuevo nodo, p al
padre, a al abuelo y t al tio podemos hacer una rotacin y un cambio de colores que nos
dejar todo en orden de nuevo. Slo p y x pueden ser rojos en este caso porque si a fuera
rojo hubiese una situacin no vlida ANTES de insertar. Ahora podemos usar la
terminologa de los rboles AVL y decir que el nodo nuevo x puede ser externo o interno.
Si es externo una rotacin simple y un cambio de color de p y de a arreglan la cosa:
a
a
A
B C
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Aunque x es una hoja y en ese caso t es null, hemos dibujado un caso ms general para
usar esto ms adelante.
Para el caso de una insercin como nodo interno: rotacin doble.
a
a
t
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
p
A
B
C
D
E
Antes de continuar tenemos que estar seguros que esto funciona tambin para el caso
general (en que X no es hoja). Primero podemos ver que se mantienen las condiciones
de rojo-negro intercalados y tambin la de los nodos negros en los paths ya que se
conservo la cantidad de nodos negros (dos a la derecha, 1 a la izquierda). Tambin se
puede ver que las races de A,B,C y D deberan haber sido originalmente negras (o null)
si todo estaba en orden antes de aparecer X.
OK, hasta aqu, pero qu pasa si el to era rojo? Bueno, se ve que esto tambin se puede
arreglar:
a
p
x
A
B C
x
t
x
B
A
C
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
p
A
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
C
D
Aunque todo esto parece funcionar queda una pregunta: qu pasa si el padre de a era
originalmente rojo? Bueno, aqu podemos hacer los mismos anlisis que hemos hecho
hasta ahora. Esta vez s que tiene sentido tener en cuenta lo del caso general, o sea que
estamos tratando con nodos internos.
Insercin top-down en rboles rojo-negro
Para evitar la necesidad de tener que estar rotando el rbol cuando se vaya hacia arriba
de vuelta de haber hecho una insercin podemos usar un truco cuando vayamos hacia
abajo de modo de asegurar que cuando se llega al lugar que se debe insertar, el to nunca
ser rojo por lo cual bastar con insertar una hoja roja y hacer a lo ms una rotacin
(simple o doble).
El procedimiento se basa en lo siguiente: mientras se va hacia abajo, si vemos un nodo
x que tiene dos hijos rojos cambiamos x a rojo y hacemos los hijos negros.
X