Documente Academic
Documente Profesional
Documente Cultură
Definición: Un ABB es de tipo equilibrado o balanceado (AVL) si, para cada uno de sus
nodos ocurre que las alturas de sus dos subárboles izquierdo y derecho difieren como mucho
en 1. Los árboles que cumplen esta condición son denominados a menudo árboles AVL.
Las siglas AVL provienen de las iniciales de Addelson- Velskii y Landis que son los nombres
de sus creadores.
En el mejor caso el ABB es de altura mínima, es decir que en todos sus n – 1 primeros
niveles están los nodos casi completos y solo varían en las hojas. En este caso el número de
nodos está dado por n = 2h+1 - 1, con h = altura del árbol y esto implica que la complejidad
en tiempo de ejecución se reduce a O(log 2 n).
Todo árbol AVL es un ABB equilibrado, esto implica que a través de los árboles AVL
realizaremos un procedimiento de búsqueda análogo al de los ABB, pero con la ventaja de
que garantizaremos un caso peor de O(log2 n) y el mantenimiento del equilibrio en todos y
cada uno de sus elementos.
Para las operaciones de inserción y eliminación también tomaremos como base las del
ABB. El único problema que tendrán es el mantener siempre tras cada inserción o
eliminación la condición de equilibrio, pero esto puede hacerse muy fácilmente sin más que
hacer algunos reajustes locales (rotaciones), cambiando apuntadores. La complejidad de
estas operaciones aplicando el mismo razonamiento que la búsqueda nunca excederá de
O(Log2 n).
Sea B = (r, {Ir, Dr}) un árbol AVL y hIr y hDr las alturas de sus ramas Ir y Dr
respectivamente. Supongamos que se insertará un nodo en Ir el cual cambia o afecta su
altura (hIr). Pueden darse tres casos:
Los tres valores posibles que tomará este campo serán los siguientes:
Así, la implementación de un árbol AVL sólo es una extensión de un ABB solo se agrega
un atributo Bal a la clase Nodo y se declara así:
Clase Nodo
Atributos
Elem Id; #campo id o clave del nodo
? Nodo Izq;
? Nodo Der;
Subrango Entero Bal = [- 1…1]; #atributo indicativo del balance del nodo
fClase Nodo
Las operaciones de consulta del árbol AVL (pertenece y localizar) son idénticas a las del
ABB, pues no afectan el balance o equilibrio del árbol AVL. En cambio las operaciones de
inserción y eliminación sí lo afectan, de manera que deben utilizar este campo para validar
el balance y realizar las modificaciones necesarias (rotaciones de nodos) para que el árbol se
mantenga equilibrado.
1. Busca en el árbol el lugar donde se insertará el nuevo nodo (una hoja tal como en un
ABB). Esto implica recorrer un camino desde la raíz hasta el lugar de inserción. Este paso
consume un tiempo de O(Log2 n) dado que la altura de un árbol AVL es de O(Log 2 n).
3. Si existe algún desequilibrio (el campo balance de algún nodo tome el valor - 2 o +2) se
debe reorganizar el subárbol que tiene como raíz dicho nodo (el que ocasiona el
desequilibrio que será llamado nodo pivote). La operación de rebalanceo se efectúa
mediante una secuencia de reasignación de apuntadores que determinan una rotación
simple o doble de dos o tres nodos, además de la actualización de los factores de
balance en cada nodo. Este paso es de O(1).
Rotaciones
La operación de rotación se utiliza para restablecer el equilibrio de un AVL, cuando se
pierde debido a una operación de inserción o eliminación.
Operaciones de balanceo:
1.- 2.-
A A
3.- 4.-
A A
En los casos 1 y 4 ocurre un desequilibrio al insertar un nodo por una rama “exterior”
izquierda o derecha del AVL y se necesita una rotación simple para restaurarlo. En los casos
2 y 3 ocurre desequilibrio al insertar u nodo por una rama “interior” a la izquierda o la
derecha, por lo que se requiere una rotación doble.
NA NB
NB NA
NA NA Q
NB NB NA
Q
Q NB
-1 -1 -1
8 P
8 P
8
-1 0 -2 0 0 0
4 9 H 4 9 3 9
0 -1 0 0
3 3 1 4
0
1
A.Insertar (A.Raiz(), 1). S produce Estado Final – Rotación Simple a
Estado Inicial desequilibrio en una rama izquierda la Izquierda
externa
-2
N 8
P
-2 0
H 7 9 0
7
0
0 +1
5 5 8
0
0 0 0 0
3 6 3 6 9
3.
Rotación de los nodos N y H hacia la izquierda. Falta
rotar N y P hacia la derecha Estado Final – Rotación Doble a la Izquierda
Estado Inicial A.Insertar (A.Raiz(), 8). Se produce Estado Final – Rotación Simple a la
desequilibrio en una rama derecha externa Derecha
+1
+1
4 4
P
0 +1 0 +2
H
2 5 2 5
0 -1
7 7
0
6 N
Estado Inicial
A.Insertar (A.Raiz(), 6). El desequilibrio se produce en
una rama interna del subárbol derecho de P
+2 +1
4 4
P
P
0 +2 0 0
N
2 5 2 6
+1 0
0
6 5 7
0
H
7
Rotación de los nodos N y H hacia la derecha. Falta Estado Final – Rotación Doble a la Derecha
rotar N y P hacia la izquierda