Está en la página 1de 71

Arboles Binarios de Bsqueda

Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.1/52
Arboles Binarios
Arbol binario: rbol ordenado de grado 2, que puede estar vaco
o puede estar formado por un nodo raz del que cuelgan dos
subrboles binarios disjuntos, denominados subrbol izquierdo
y subrbol derecho.
raiz
der
A
izq
A
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.2/52
Arboles Binarios
Un rbol binario se dice relleno si todos sus nodos o bien tienen
dos hijos o bien son hojas, es decir, si no contiene nodos con un
solo hijo.
El nmero de hojas en un rbol binario relleno es siempre igual al
nmero de nodos internos ms uno.
4
31
90 15
34
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.3/52
Arboles Binarios
Un rbol binario de altura h se dice completo si todos sus nodos
interiores tienen dos hijos no vacos y todas sus hojas estn en el
nivel h.
El nmero de nodos de un rbol binario completo de altura h es
igual a 2
h+1
1. Como todo rbol binario completo es tambin
relleno, 2
h
de esos nodos son hojas y 2
h
1 son nodos internos.
31
22 50
4
90 15
34
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.4/52
Arboles Binarios
Un rbol binario de altura h se dice semicompleto si los nodos
de los niveles h y h-1 son los nicos de grado inferior a 2 y las
hojas del ltimo nivel ocupan las posiciones ms a la izquierda
del mismo.
64
90 15
34
4
22 50
7
31
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.5/52
Arboles de Bsqueda
La aplicacin ms importante de los rboles es organizar la
informacin de manera jerrquica para acelerar los procesos de
bsqueda, insercin y borrado.
Normalmente, la clave de bsqueda se extrae de la propia
informacin, directamente o mediante transformaciones
adecuadas.
Para clasicar la informacin sin ambigedad, es necesario
establecer entre las claves de bsqueda un conjunto de
condiciones mutuamente excluyentes, tal que una y slo una de
ellas sea cierta.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.6/52
Arboles de Bsqueda
Por ejemplo, dada una clave entera k, cualquier otra clave m
podra clasicarse de acuerdo a las siguientes condiciones:
1. m k/2
2. k/2 < m < 2k
3. m 2k
17
234
90 712
48 16
4 167
44
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.7/52
Arboles de Bsqueda
Un rbol de bsqueda se dene como un rbol en el que,
para cada nodo, las claves de los subrboles hijos satisfacen
una y slo una condicin de un conjunto de n condiciones
mutuamente excluyentes.
Si n = 2, se tendr un rbol de bsqueda binario; si n = 3, se
tendr un rbol de bsqueda ternario; etc.
As pues, un rbol binario de bsqueda (ABB) es un rbol
binario en el que para cada nodo se denen dos condiciones
mutuamente excluyentes, de forma que las claves de los
nodos del subrbol izquierdo cumplen una de ellas, y las del
subrbol derecho la otra.
Habitualmente estas condiciones determinan una relacin de
orden, de manera que el recorrido en orden simtrico del rbol
produce una secuencia ordenada de nodos.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.8/52
Arboles de Bsqueda
Un cierto conjunto de datos puede representarse mediante
distintos ABB.
El recorrido simtrico de estos ABB producir la misma secuencia
de nodos.
Sin embargo, tendrn diferentes alturas y por tanto el coste
promedio de bsqueda ser distinto.
Suponiendo datos equiprobables, sern ptimos aquellos ABB
cuya altura sea mnima. De ah el inters de los ABB equilibrados.
Vanse los ABB de la pgina siguiente: ambos representan el
mismo conjunto de datos; en el primer caso se trata de un ABB
semicompleto de altura 2 (mnima), y en el segundo de un ABB
completamente degenerado de altura 4 (mxima), equivalente a
una lista ligada.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.9/52
Arboles de Bsqueda
ABB ptimo ABB completamente degenerado
15
7 22
10 3
7
22
10
15
3
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.10/52
Arboles Binarios de Bsqueda
Operaciones bsicas: Bsqueda, Insercin y Borrado.
La complejidad de estas operaciones est en O(h), siendo h la
altura del rbol; en ABB equilibrados, h log
2
(n), siendo n el
nmero de nodos.
Las tres operaciones se basan en un sencillo esquema de
bsqueda:
Si el rbol t est vaco, el elemento buscado x no se
encuentra en el mismo
En caso contrario, se pueden dar tres casos:
clave(x) = clave(raz(t)) el elemento ha sido encontrado
clave(x) < clave(raz(t)) se repite la bsqueda en el
subrbol izquierdo
clave(x) > clave(raz(t)) se repite la bsqueda en el
subrbol derecho
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.11/52
TAD ABB: denicin
Tipos
ELEMENTO
NODO
ABB
Constantes
NODO_NULO
Funciones
funcin clave(x: ELEMENTO): entero
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
procedimiento inicializar (ref t: ABB)
Inicializa la variable t de tipo ABB
Realiza las reservas dinmicas de memoria necesarias
Como resultado, se tendr un ABB t vaco
inicializar (t): primera accin a realizar sobre t
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin buscar (t: ABB, k: entero): NODO
Busca la clave k en el ABB t
Si no la encuentra, retorna NODO_NULO
Si la encuentra, retorna el nodo correspondiente
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin insertar (ref t: ABB, x: ELEMENTO): booleano
Busca en el ABB t la posicin de insercin para la
informacin x
Si existe ya un nodo con la informacin x, devuelve FALSO
En caso contrario, crea un nuevo nodo con la informacin x,
lo aade en la posicin donde acab la bsqueda y
devuelve VERDADERO
Ntese que los nuevos nodos se insertan siempre en las
hojas, ya que la bsqueda termina cuando se accede a un
subrbol vaco
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
t
7
3
22
15
10
insertar(t,8)

t
7
22
3
8
15
10
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin eliminar (ref t: ABB, k: entero): booleano
Busca en el ABB t un nodo de clave k
Si no lo encuentra, devuelve FALSO
Si lo encuentra, elimina el nodo de clave k y devuelve
VERDADERO
En la operacin de borrado pueden darse tres casos:
1. Eliminar una hoja
2. Eliminar un nodo con un solo hijo
3. Eliminar un nodo con dos hijos
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
Eliminar una hoja: se elimina el nodo en cuestin, y se actualiza a
NODO_NULO el campo correspondiente del nodo padre
t
17
8
15
7
10 3 35
22
eliminar(t,17)

t
7
8
15
22
10 3 35
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
Eliminar un nodo con un solo hijo: se elimina el nodo en cuestin, y
se actualiza el campo correspondiente del nodo padre para que apunte
al hijo del nodo eliminado
t
17
8
15
7
10 3 35
22
eliminar(t,10)

t
3
15
7
22
35 17 8
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
Eliminar un nodo con dos hijos: se sustituye la informacin del nodo
en cuestin por la de su predecesor/sucesor en un recorrido simtrico.
A continuacion se elimina el nodo predecesor/sucesor, que por fuerza
ha de ser una hoja o un nodo con un solo hijo (casos anteriores).
t
17
8
15
7
10 3 35
22
eliminar(t,15)

t
35
7
3
22
17
10
8
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
Eliminar un nodo con dos hijos: se sustituye la informacin del nodo
en cuestin por la de su predecesor/sucesor en un recorrido simtrico.
A continuacion se elimina el nodo predecesor/sucesor, que por fuerza
ha de ser una hoja o un nodo con un solo hijo (casos anteriores).
t
17
8
15
7
10 3 35
22
eliminar(t,15)

t
10
22
7
8
3 35
17
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin mximo(t: ABB): NODO
Devuelve el nodo de clave mxima en el ABB t
Si t est vaco, devuelve NODO_NULO
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin mnimo(t: ABB): NODO
Devuelve el nodo de clave mnima en el ABB t
Si t est vaco, devuelve NODO_NULO
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin predecesor (t: ABB, k: entero): NODO
Devuelve el nodo que precede al nodo de clave k en un
recorrido simtrico del ABB t
Si la clave k no se encuentra en t, o el nodo correspondiente
no tiene predecesor (por ser el primero en el recorrido
simtrico de t), la funcin devuelve NODO_NULO
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin sucesor (t: ABB, k: entero): NODO
Devuelve el nodo que sucede al nodo de clave k en un
recorrido simtrico del ABB t
Si la clave k no se encuentra en t, o el nodo
correspondiente no tiene sucesor (por ser el ltimo en el
recorrido simtrico de t), la funcin devuelve NODO_NULO
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin raz(t: ABB): NODO
Devuelve el nodo raz del ABB t
Si t est vaco, devuelve NODO_NULO
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin sub_izq(t: ABB): ABB
Devuelve el subrbol izquierdo del ABB t
Importante: no devuelve un nuevo rbol sino una
referencia a la parte izquierda del ABB t
Precondicin: t no vaco
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin sub_der (t: ABB): ABB
Devuelve el subrbol derecho del ABB t
Importante: no devuelve un nuevo rbol sino una
referencia a la parte derecha del ABB t
Precondicin: t no vaco
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin valor (t: ABB, n: NODO): ELEMENTO
Devuelve el valor almacenado en el nodo n del ABB t
Precondicin: n = NODO_NULO
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin vaco?(t: ABB): booleano
Devuelve:
VERDADERO si t est vaco
FALSO en caso contrario
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: denicin
funcin altura(t: ABB): entero
Devuelve la altura del ABB t
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.12/52
TAD ABB: implementacin
constantes NODO_NULO = NULO fin_constantes
tipos
ITEM = registro
valor: ELEMENTO
padre: apuntador a ITEM
hijo_izq: apuntador a ITEM
hijo_der: apuntador a ITEM
fin_registro
NODO = apuntador a ITEM
ABB = NODO
fin_tipos
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.13/52
TAD ABB: implementacin
t
17
7
3 10
22
35
Valor Nodo padre
Hijo derecho Hijo izquierdo
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.14/52
TAD ABB: implementacin
procedimiento inicializar (ref t: ABB)
principio
t NODO_NULO
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.15/52
TAD ABB: implementacin
funcin buscar (t: ABB, k: entero): NODO
var p: NODO n_var
usa clave() n_usa
principio
p t
si p = NODO_NULO OR clave(apuntado(p).valor) = k entonces
devolver p
n_si
si clave(apuntado(p).valor) > k entonces
devolver buscar (apuntado(p).hijo_izq, k)
si_no
devolver buscar (apuntado(p).hijo_der, k)
n_si
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.16/52
TAD ABB: implementacin
funcin insertar (ref t: ABB, x: ELEMENTO): booleano
var p, q, r: NODO n_var
usa clave() n_usa
principio
si t = NODO_NULO entonces
t reservar (1,ITEM)
apuntado(t).valor x
apuntado(t).padre NODO_NULO
apuntado(t).hijo_izq NODO_NULO
apuntado(t).hijo_der NODO_NULO
si_no
q t
mientras q = NODO_NULO hacer
si clave(apuntado(q).valor) = clave(x) entonces
devolver FALSO
n_si
r q
[ continua en la pgina siguiente ... ]
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.17/52
TAD ABB: implementacin
[ ... viene de la pgina anterior ]
si clave(apuntado(q).valor) > clave(x) entonces
q apuntado(q).hijo_izq
si_no
q apuntado(q).hijo_der
n_si
n_mientras
p reservar (1,ITEM)
apuntado(p).valor x
apuntado(p).padre r
apuntado(p).hijo_izq NODO_NULO
apuntado(p).hijo_der NODO_NULO
si clave(apuntado(r).valor) > clave(x) entonces
apuntado(r).hijo_izq p
si_no
apuntado(r).hijo_der p
n_si
n_si
devolver VERDADERO
n /* insertar */
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.18/52
TAD ABB: implementacin
funcin eliminar (ref t: ABB, k: entero): booleano
var p, q, r: NODO n_var
usa clave() n_usa
principio
p buscar (t,k)
si p = NODO_NULO entonces
devolver FALSO
n_si
si apuntado(p).hijo_izq = NODO_NULO OR
apuntado(p).hijo_der = NODO_NULO entonces
q apuntado(p).padre
si q = NODO_NULO entonces /* casos 1 y 2 con p = raz*/
si apuntado(p).hijo_izq = NODO_NULO entonces /* caso 2:izquierda */
si p = apuntado(q).hijo_izq entonces
apuntado(q).hijo_izq apuntado(p).hijo_izq
si_no
apuntado(q).hijo_der apuntado(p).hijo_izq
n_si
apuntado(apuntado(p).hijo_izq).padre q
[ continua en la pgina siguiente ... ]
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.19/52
TAD ABB: implementacin
[ ... viene de la pgina anterior ]
si_no /* casos 2:derecha y 1*/
si apuntado(p).hijo_der = NODO_NULO entonces
si p = apuntado(q).hijo_izq entonces
apuntado(q).hijo_izq apuntado(p).hijo_der
si_no
apuntado(q).hijo_der apuntado(p).hijo_der
n_si
apuntado(apuntado(p).hijo_der).padre q
si_no /* caso 1 */
si p = apuntado(q).hijo_izq entonces
apuntado(q).hijo_izq NODO_NULO
si_no
apuntado(q).hijo_der NODO_NULO
n_si
n_si
n_si
[ continua en la pgina siguiente ... ]
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.20/52
TAD ABB: implementacin
[ ... viene de la pgina anterior ]
si_no /* casos 1 y 2 con p = raz */
si apuntado(p).hijo_izq = NODO_NULO entonces
t apuntado(p).hijo_izq
apuntado(t).padre NODO_NULO
si_no
t apuntado(p).hijo_der
si t = NODO_NULO entonces
apuntado(t).padre NODO_NULO
n_si
n_si
n_si
liberar (p)
si_no /* caso 3 */
q mximo(apuntado(p).hijo_izq)
apuntado(p).valor apuntado(q).valor
eliminar (apuntado(p).hijo_izq,clave(apuntado(q).valor))
n_si
devolver VERDADERO
n /* eliminar */
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.21/52
TAD ABB: implementacin
funcin mximo(t: ABB): NODO
var
p: NODO
n_var
principio
si t = NODO_NULO entonces
devolver NODO_NULO
n_si
p t
mientras apuntado(p).hijo_der = NODO_NULO hacer
p apuntado(p).hijo_der
n_mientras
devolver p
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.22/52
TAD ABB: implementacin
funcin mnimo(t: ABB): NODO
var
p: NODO
n_var
principio
si t = NODO_NULO entonces
devolver NODO_NULO
n_si
p t
mientras apuntado(p).hijo_izq = NODO_NULO hacer
p apuntado(p).hijo_izq
n_mientras
devolver p
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.23/52
TAD ABB: implementacin
funcin predecesor (t: ABB, k: entero): NODO
var
p, q: NODO
n_var
principio
p buscar (t,k)
si p = NODO_NULO entonces
devolver NODO_NULO
n_si
si apuntado(p).hijo_izq = NODO_NULO entonces
devolver mximo(apuntado(p).hijo_izq)
n_si
q apuntado(p).padre
mientras q = NODO_NULO AND apuntado(q).hijo_izq = p hacer
p q
q apuntado(q).padre
n_mientras
devolver q
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.24/52
TAD ABB: implementacin
funcin sucesor (t: ABB, k: entero): NODO
var
p, q: NODO
n_var
principio
p buscar (t,k)
si p = NODO_NULO entonces
devolver NODO_NULO
n_si
si apuntado(p).hijo_der = NODO_NULO entonces
devolver mnimo(apuntado(p).hijo_der)
n_si
q apuntado(p).padre
mientras q = NODO_NULO AND apuntado(q).hijo_der = p hacer
p q
q apuntado(q).padre
n_mientras
devolver q
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.25/52
TAD ABB: implementacin
funcin raz(t: ABB): NODO
principio
devolver t
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.26/52
TAD ABB: implementacin
P { t no vaco }
funcin sub_izq(t: ABB): ABB
principio
devolver apuntado(t).hijo_izq
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.27/52
TAD ABB: implementacin
P { t no vaco }
funcin sub_der (t: ABB): ABB
principio
devolver apuntado(t).hijo_der
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.28/52
TAD ABB: implementacin
P { n = NODO_NULO }
funcin valor (t: ABB, n: NODO): ELEMENTO
principio
devolver apuntado(n).valor
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.29/52
TAD ABB: implementacin
funcin vaco?(t: ABB): booleano
principio
si t = NODO_NULO entonces
devolver VERDADERO
si_no
devolver FALSO
n_si
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.30/52
TAD ABB: implementacin
funcin altura(t: ABB): entero
var h, h_aux: entero n_var
principio
si t = NODO_NULO entonces
devolver 0
n_si
h 0
si apuntado(t).hijo_izq = NODO_NULO entonces
h 1 + altura(apuntado(t).hijo_izq)
n_si
si apuntado(t).hijo_der = NODO_NULO entonces
h_aux 1 + altura(apuntado(t).hijo_der)
si h_aux > h entonces
h h_aux
n_si
n_si
devolver h
n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.31/52
ABB Equilibrados
Se dice que un ABB con n nodos es equilibrado si su altura es
prxima (es decir, igual o ligeramente superior) a log(n).
Los ABB equilibrados proporcionan tiempos de bsqueda en
(log n).
Las tcnicas para conseguir ABB equilibrados se basan en reasignar
nodos o subrboles dentro del ABB tras una operacin de insercin
o borrado que ha producido un desequilibrio en la estructura.
Estas reasignaciones (conocidas como rotaciones) preservan la
propiedad fundamental de los ABB (ver pgina siguiente).
Atendiendo al criterio de equilibrio, se distinguen varios tipos de ABB
equilibrados: rboles 2-3, rboles rojo-negro, rboles AVL, etc.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.32/52
ABB Equilibrados: Rotaciones
clave(T1) < clave(v) < clave (T2) < clave(p) < clave(T3)
rotar_derecha (p)
T1 T2
T3
T2
T1
T3 rotar_izquierda (v)
v p
v p
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.33/52
Arboles AVL
Un Arbol AVL (G.M. Adelson-Velskii y E.M. Landis, 1962) es un
ABB en el que las alturas de los subrboles izquierdo y derecho
de cualquier nodo dieren a lo sumo en 1.
Esta restriccin se conoce como propiedad de los rboles AVL.
La altura de un rbol AVL con n nodos est en (log n) (vase
Heileman, pp. 194-195).
Los rboles AVL se representan igual que un ABB, slo que
aadiendo a cada nodo un campo adicional que indica su grado
de equilibrio.
Este valor se calcula como la diferencia entre las alturas de los
subrboles derecho e izquierdo, que puede ser +1, 0 o -1 (vase
el ejemplo siguiente).
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.34/52
Arboles AVL
Ejemplo de rbol AVL con el grado de equilibrio de cada nodo
1
+1
0
0
0 0 0 +1
17
3 19 35
22
10
7
20
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.35/52
Arboles AVL
En un rbol AVL se emplean los mismos procedimientos de
consulta denidos genricamante para un ABB.
Adems, como la altura de un rbol AVL de n nodos est en
(log n), se tiene la seguridad de que esas operaciones tendrn
en el peor caso un coste logartmico.
Sin embargo, las operaciones insertar () y eliminar () podran
modicar el equilibrio de los nodos ms all del rango [-1,1]
permitido.
As sucede en el ejemplo anterior si se aade el valor 21 o si se
elimina el valor 35.
Ser necesario, por tanto, aadir el cdigo necesario para que
estas operaciones mantengan la propiedad de los rboles AVL.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.36/52
Arboles AVL: Insercin
Para insertar un nuevo nodo en un rbol AVL, en primer lugar se
aplica el algoritmo genrico de insercin denido para ABB. El
coste de esta operacin est en O(log n).
A continuacin se recorre el camino de regreso desde la hoja
insertada hacia la raz y se van actualizando los equilibrios de los
nodos.
El camino de vuelta podra llegar hasta la raz sin que se
produjeran desequilibrios, por lo que no sera necesario modicar
la estructura del rbol. Ntese que el coste de vuelta estara
tambin en O(log n).
Sin embargo, si al actualizar el equilibrio de un nodo, ste pasa de
+1 a +2 o de -1 a -2, entonces es necesario ajustar el subrbol de
este nodo para recuperar la propiedad de los rboles AVL.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.37/52
Arboles AVL: Insercin
El nodo en cuestin se denomina pivote, y sobre l ser
necesario aplicar una de las siguientes operaciones:
una rotacin simple a izquierda o a derecha
una rotacin doble izquierda-derecha o derecha-izquierda
Estas rotaciones mantienen la altura que tena el pivote antes de
la insercin. As, una vez corregida la estructura por debajo del
pivote, la propiedad de los rboles AVL se mantiene en el resto
de la estructura, y no es necesario seguir explorndola.
De hecho, el nico pivote potencial a considerar es el primer
nodo en el camino de vuelta con equilibrio igual a +1 o -1. Si este
nodo no cambia a +2 o -2, la estructura del rbol no tendr que
ser modicada.
Finalmente, las rotaciones simples o dobles tienen un coste (1),
por lo que el coste de insercin en un rbol AVL estar en O(log n).
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.38/52
Arboles AVL: Insercin
Rotacin simple a izquierda
T1, T2 y T3 completos
(b)
(c)
T1 T2
0
T3
h h
0
h + 1
h + 1
T0
T0
todos sus nodos tienen equilibrio 0
T2
T1
T3
T0
h
+1
0
T2
T1
T3
h
h
+1
+2
h h
(a)
v
v
p
v
p
p
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.39/52
Arboles AVL: Insercin
Rotacin simple a derecha
2
todos sus nodos tienen equilibrio 0
(c)
0
h h
0
h + 1
T0
T1
T3
T1
T2 T3
1
T1, T2 y T3 completos
T2
T0
h 0
h h
(a)
1
T1
T3
T2
h
h
(b)
h + 1
T0
v
v
p
v
p
p
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.40/52
Arboles AVL: Insercin
Rotacin doble derecha-izquierda
(c)
todos sus nodos tienen equilibrio 0
h1
T1
h
T2.1
0
T2.2 h
T3
h
0
1
T1
T0
h
+2
T2.1
h1
0
+2
T2.2 h
T3
h
(d)
(b) (a)
T1, T2.1, T2.2 y T3 completos
T1
T3
T0
h
+1
h
0
0
T2.1
h1 h1
T2.2
T1
T3
T0
h
h
T2.1
h1
T2.2 h
+1
1
+2
T0
p
p
w
v
p
v
w
w
p
v
w
v
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.41/52
Arboles AVL: Insercin
Rotacin doble izquierda-derecha
(d)
todos sus nodos tienen equilibrio 0
2
T0
h
h1
h
h
T1
T2.1
T2.2
T3
0
2
2
T0
h1
h
0
h
h
0
T1
T2.1 T2.2
T3
+1
(c)
T1, T2.1, T2.2 y T3 completos
h
h
0
0
h1 h1
T0
(a)
T1
T2.1 T2.2
T3
1
T0
h
h
h1
h
(b)
T1
T2.1 T2.2
T3
1
+1
p
w
p
v
w
w
v
v
v
w
p
p
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.42/52
Arboles AVL: Insercin
Cmo elegir el tipo de rotacin tras una insercin en un rbol AVL
Si el pivote potencial (con equilibrio +1 o -1) no cambia a +2 o -2:
no es necesario modicar la estructura del rbol
Si el pivote cambia de +1 a +2 y su hijo derecho cambia de 0 a
+1: rotacin simple a izquierda
Si el pivote cambia de +1 a +2 y su hijo derecho cambia de 0 a -1:
rotacin doble derecha-izquierda
Si el pivote cambia de -1 a -2 y su hijo izquierdo cambia de 0 a -1:
rotacin simple a derecha
Si el pivote cambia de -1 a -2 y su hijo izquierdo cambia de 0 a +1:
rotacin doble izquierda-derecha
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.43/52
Arboles AVL: Borrado
Para eliminar un nodo en un rbol AVL, se aplica el algoritmo
genrico de borrado denido para ABB. El coste de esta operacin
est en O(log n).
A continuacin se recorre el camino de vuelta desde el padre del
nodo eliminado hacia la raz y se actualizan los equilibrios.
El camino de vuelta podra llegar hasta la raz sin que se produjeran
desequilibrios, por lo que no sera necesario modicar la estructura
del rbol. Ntese que el coste de vuelta estara en O(log n).
Si al actualizar el equilibrio de un nodo, ste pasa de +1 a +2 o de -1
a -2, deber aplicarse al menos una rotacin simple o doble para
recuperar la propiedad de los rboles AVL.
El reequilibrado de un subrbol AVL tras una operacin de borrado
no conserva la altura, por lo que podra ser necesario aplicar varias
rotaciones en el camino de vuelta hacia la raz.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.44/52
Arboles AVL: Borrado
En el caso peor, al eliminar una de las hojas menos profundas del
rbol, podra tener que realizarse una rotacin en cada nodo del
camino hacia la raz.
An as, como el coste de una rotacin est en (1) y la longitud del
camino est en (log n), el coste de borrado en el peor caso estar
tambin en (log n).
Ejemplo (2 rotaciones a izquierda sucesivas, sobre los nodos 4 y 34):
+1
(a)
0
0 +1
0
(b)
0
+1
0
+1
0
0
0
+1
+1
+1
+1 +1
0 0 0 +1
0
0
4
99
77
90
64
34
4
50
54 22
15
7
34
96
99
77
90
64
50
54 22
15
96
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.45/52
Arboles AVL: Borrado
Si el padre del nodo eliminado (o cualquier otro en la vuelta hacia el
nodo raz) pasa de equilibrio 0 a +1 o -1, no es necesario seguir
explorando el rbol, porque la altura del subrbol correspondiente no
ha cambiado, lo que signica que la propiedad de los rboles AVL se
sigue cumpliendo en el resto de la estructura.
Ejemplo:
(b)
0
0
0 0
0
0
0
0
+1
+1
+1
0
0
0
0
0
0
+1
+1
+1
1
(a)
64
15
99
54 54
50
90
4
50
34
22
64
4
90
77 77
34
99
96 96
15
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.46/52
Arboles AVL: Borrado
Si el padre del nodo eliminado pasa de +1 o -1 a 0, la altura del
subrbol correspondiente se ve modicada, por lo que cambiar el
equilibrio del nodo abuelo, y quiz tambin el de nodos superiores.
Esto podra implicar ninguna, una o varias rotaciones, dependiendo
del estado del rbol. Por ejemplo:
(d)
0
+1 0
+1
0
+2
(c)
0
+1
0
+1
+1
(a)
0
1
0
0
+1
0
+1
+1
0
+1
(b)
0
+1
0
0
0
0
34 90
90
50
77
77
99
64
96
99
50
77
34
96
64
50
90
90
77
34
99
99
96
69
50
96
34
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.47/52
Arboles AVL: Borrado
En resumen: cmo se gestiona el borrado de un elemento en un rbol AVL?
Si el equilibrio del padre pasa de 0 a +1 o -1: el algoritmo termina
Si el equilibrio del padre pasa de +1 o -1 a 0: continuar reequilibrando nodos hacia
el nodo raz
Si el equilibrio del padre pasa de +1 a +2:
Si el equilibrio del hijo derecho es -1: rotacin doble derecha-izquierda y
continuar reequilibrando nodos hacia el nodo raz
Si el equilibrio del hijo derecho es 0: rotacin simple a izquierda y el algoritmo
termina
Si el equilibrio del hijo derecho es +1: rotacin simple a izquierda y continuar
reequilibrando nodos hacia el nodo raz
Si el equilibrio del padre pasa de -1 a -2:
Si el equilibrio del hijo izquierdo es +1: rotacin doble izquierda-derecha y
continuar reequilibrando nodos hacia el nodo raz
Si el equilibrio del hijo izquierdo es 0: rotacin simple a derecha y el algoritmo
termina
Si el equilibrio del hijo izquierdo es -1: rotacin simple a derecha y continuar
reequilibrando nodos hacia el nodo raz
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.48/52
TAD ABB: Ejercicios (1)
Demostrar que en un rbol binario de n nodos hay n + 1 hijos nulos.
Demostrar que el nmero mximo de nodos en un rbol binario de
altura h es 2
h+1
1.
Demostrar que el nmero de hojas de un rbol binario relleno es
igual al nmero de nodos internos ms 1.
Mostrar el resultado de insertar los valores 3, 1, 4, 6, 9, 2, 5 y 7 en un
ABB inicialmente vaco. Repetir la operacin insertando los valores
en orden creciente. Repetir de nuevo la operacin insertndolos en
el orden siguiente: 5, 2, 4, 3, 7, 9, 6, 1. Cul es la probabilidad de
obtener este ltimo ABB a partir de una permutacin aleatoria de los
valores enumerados? Cul es la altura promedio del rbol binario
obtenido a partir de una permutacin aleatoria de dichos valores?
Escribir en lenguaje C una funcin que calcule la altura promedio del
ABB obtenido a partir de n valores distintos, considerando para ello
todas las permutaciones posibles.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.49/52
TAD ABB: Ejercicios (2)
En un ABB con n nodos se tienen n + 1 referencias nulas a hijos.
Para aprovechar ese espacio no utilizado, convenimos en que si
el hijo izquierdo de un nodo v es nulo, entonces hacemos que
dicho hijo apunte al predecesor de v en un recorrido simtrico del
ABB. Anlogamente, si el hijo derecho de v es nulo, hacemos que
apunte al sucesor de v en un recorrido simtrico. Los ABB que
resultan reciben el nombre de rboles enhebrados y las
referencias adicionales se llaman hebras.
Cmo pueden distinguirse las hebras de las referencias
reales a hijos?
Modifquese la implementacin del TAD ABB para que
represente ABB enhebrados.
Cul es la ventaja de los ABB enhebrados?
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.50/52
TAD ABB: Ejercicios (3)
Escribir en lenguaje algortmico la operacin buscar_k_simo(),
que se aadir al repertorio de operaciones del TAD ABB. La
operacin buscar_k_simo(t,i) devuelve el nodo con la i-sima
clave ms pequea. Suponiendo que todos los elementos del
ABB tienen claves distintas, modifquese la implementacin del
TAD ABB para que esta operacin pueda realizarse en tiempo
O(log n), sin que el coste de las dems operaciones se vea
afectado.
Escribir una funcin que tome como entrada un ABB t y dos
claves k
1
y k
2
(k
1
k
2
), e imprima la secuencia de elementos x
tales que k
1
clave(x) k
2
. La funcin ha de tener complejidad
O(K + log n), donde K es el nmero de elementos que verican
la condicin y n el nmero de nodos del ABB.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.51/52
TAD ABB: Ejercicios (4)
Considerando la implementacin bsica del TAD ABB, escrbanse
sendos procedimientos para efectuar bien una rotacin a
izquierda, bien una rotacin a derecha sobre un nodo v de un
ABB t.
Partiendo de la implementacin bsica del TAD ABB, escrbase
una implementacin del TAD AVL. Ntese que tan slo ser
necesario modicar la denicin de los tipos y aadir dos nuevas
operaciones, aadir_AVL() y eliminar_AVL(), que harn uso de
las operaciones bsicas del TAD ABB, as como de los
procedimientos de rotacin escritos previamente (que tambin
formarn parte del TAD, como operaciones privadas).
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de B usqueda p.52/52

También podría gustarte