Вы находитесь на странице: 1из 71

Arboles Binarios de Bsqueda

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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

A izq

A der

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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.
34

31

90
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

15
Arboles Binarios de Busqueda 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 2h+1 1. Como todo rbol binario completo es tambin relleno, 2h de esos nodos son hojas y 2h 1 son nodos internos.
34

31

50
Algoritmos y Estructuras de Datos

22

90

15
Arboles Binarios de Busqueda p.4/52

Departamento de Electricidad y Electr onica (UPV/EHU)

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.
34

31

50

22

90

15

7
Algoritmos y Estructuras de Datos

64
Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de Busqueda 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 Busqueda 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
44

16

48

234

17

90

167

712

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda 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 Busqueda p.9/52

Arboles de Bsqueda
ABB ptimo
15
15

ABB completamente degenerado


22

22
7

10

10

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 log2 (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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda p.12/52

TAD ABB: denicin

15 t 7 22

15 t 7 22

insertar(t,8)

3 8

10

10

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda 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

15 t 7 22 7

15 t 22

eliminar(t,17)
3 10 17 35

10

35

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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
15 t 7 22 15 t 7 22

eliminar(t,10)

10

17

35

17

35

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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).
15 t 7 22 10 t 7 22

eliminar(t,15)

10

17

35

17

35

8
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de Busqueda 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).
15 t 7 22 7 17 t 22

eliminar(t,15)
3 10 17 35

10

35

8
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

8
Arboles Binarios de Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda p.12/52

TAD ABB: denicin


funcin vaco? (t: ABB): booleano Devuelve: VERDADERO FALSO si t est vaco en caso contrario

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda 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 Busqueda p.13/52

TAD ABB: implementacin

17 Valor Hijo izquierdo 7 22 Nodo padre Hijo derecho

10

35

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda p.15/52

TAD ABB: implementacin


funcin buscar (t: ABB, k: entero): NODO var p: NODO n_var usa clave() n_usa principio pt 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 Busqueda 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 qt mientras q = NODO_NULO hacer si clave(apuntado(q).valor) = clave(x) entonces devolver FALSO n_si rq [ continua en la pgina siguiente ... ]
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU) Arboles Binarios de Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 pt 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 Busqueda 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 pt 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 Busqueda 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 pq 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 Busqueda 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 pq 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 Busqueda 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 h0 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 Busqueda 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 Busqueda p.32/52

ABB Equilibrados: Rotaciones


clave(T1) < clave(v) < clave (T2) < clave(p) < clave(T3)

T3

rotar_derecha (p)

T1

T1

T2

rotar_izquierda (v)

T2

T3

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda p.34/52

Arboles AVL
Ejemplo de rbol AVL con el grado de equilibrio de cada nodo

+1 0

17

7
0 0 +1

22
0

10

19
0

35 20

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda 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 Busqueda 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 Busqueda p.38/52

Arboles AVL: Insercin


Rotacin simple a izquierda
+1

T0 (a)
0 h

+2

T0 (b)
+1

p
h

T1

T1

T2

T3

T2

T3

h+1

T1, T2 y T3 completos todos sus nodos tienen equilibrio 0

T0

(c)
0

T3

h+1

T1

T2

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda p.39/52

Arboles AVL: Insercin


Rotacin simple a derecha
T0 (a)
0 1

T0 (b)
h 1

p
h

T3

T3

T1

T2

h h+1

T1

T2

T1, T2 y T3 completos todos sus nodos tienen equilibrio 0

T0

v
0 h+1

(c)

T1

T2

T3

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda p.40/52

Arboles AVL: Insercin


Rotacin doble derecha-izquierda
+1

T0 (a)
0

p
h

T1, T2.1, T2.2 y T3 completos todos sus nodos tienen equilibrio 0

+2

T0 (b)
1

T1
0

v w T3

T1
+1

v w T3

h1

T2.1

T2.2

h1

h1

T2.1

T2.2

+2

T0 (c)
+2 1 0 0

p
h

T0 (d)
0

T1

v
h1

T2.1 T2.2
h

h h

h1

T1

T2.1

T2.2

T3

T3

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda p.41/52

Arboles AVL: Insercin


Rotacin doble izquierda-derecha
T0 (a)
0 1

p
h

T1, T2.1, T2.2 y T3 completos todos sus nodos tienen equilibrio 0

T0 (b)
+1

p
h

v w T1
h1

T3
0

v w T1
h

T3
1

T2.1

T2.2

h1

T2.1

T2.2

h1

T0
2

(c)
2 0

p
h

(d)
0

T0

+1

T3

v
T2.2
h h1 h h1

T1

T2.1

T2.2

T3

T1

T2.1

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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 Busqueda 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 Busqueda 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 +1

34
+1 +1

0 +1

4
0

64
+1

64

+1

34
0 +1 +1 0

90
+1

15
0

50
0 0

90 54 77 96
0

15
0 0

50
0

77 54 (b)

96
0

22 (a)

22

99

99

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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:
0 0 0 +1 0

64

64

+1

34
0 +1 0

90
+1 1

34
+1 0

90
+1

15
0 0

50
0

77 54

96
0 0

15 99 4

50
0

77 54

96
0

22

(a)

(b)

99

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

Arboles Binarios de Busqueda 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:
+1 +1 +1 0 +1

64 (a)

64 (b)

+1

34
0

90
1 +1

34
0

90
0 +1

50
0

77

96
0

50 99

77

96
0

69
+2 0

99

50

0 +1

90 (d)
+1 0 +1

34
0

90 77 96
0

50
0 0

96
0

(c)

34

77

99
Arboles Binarios de Busqueda p.47/52

99
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

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 Busqueda 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 2h+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 Busqueda 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 Busqueda 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 k1 y k2 (k1 k2 ), e imprima la secuencia de elementos x tales que k1 clave(x) k2 . 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 Busqueda 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 Busqueda p.52/52