Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Árboles AVL

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

Árboles binarios balanceados (AVL).

   Existen diferentes tipos y variaciones de los árboles binarios, y una de las más importantes es la
de los árboles binarios balanceados, árboles binarios de búsqueda balanceados, o simplemente,
árboles AVL.

Definición y conceptos.
   Un árbol binario balanceado (también conocidos simplemente como árboles AVL en honor a sus
creadores Adelson-Velski y Landis) es un árbol binario de búsqueda (ABB) en el que las alturas de
los dos subárboles de cada nodo difieren a lo más en 1.

   El balance de un nodo en un árbol binario en general y de un árbol AVL en particular, se define
como la altura de su subárbol izquierdo menos la altura de su subárbol derecho:

| altura(arbolIzquierdo) - altura(arbolDerecho) | < 2

 También existe la correspondiente definición simétrica: la altura de su subárbol derecho menos la


altura de su subárbol izquierdo; pero en este blog se adoptará la primera. Por convención, la altura
de un árbol AVL nulo o vacío se define como -1.

   Durante el proceso de inserción o eliminación puede ocurrir un desbalance, es decir, que el valor
absoluto de la altura de alguno de los nodos del árbol AVL sea mayor que 1.

   En caso de existir desbalance en alguno de los nodos, es decir, una condición que incumpla lo
establecido por la expresión anterior, se tiene que rebalancear el árbol para que éste siga siendo
un árbol AVL válido.

   En este sentido, existen cuatro casos que corrigen el balanceo de un árbol AVL:

Caso 1: rotación simple derecha.

Caso 2: rotación simple izquierda.

Caso 3: rotación doble izquierda derecha.

Caso 4: rotación doble derecha izquierda.

   A continuación, se describen dos de estos cuatro casos, debido a que los otros dos son simétricos
y pueden derivarse fácilmente a partir de los que se presentan.

Rotación simple.
   El primer caso de rebalanceo, la rotación derecha también conocida como rotación simple, se
ilustra en la siguiente figura:
Caso 1: rotación derecha (adaptada de With).

   La figura (a) muestra hasta antes de la inserción del elemento representado por el cuadrado rojo
(cuadrado más obscuro), un árbol AVL balanceado. El balance puede determinarse gráficamente
por los niveles representados por líneas horizontales punteadas: el balance para los nodos A y B es
0 y 1 respectivamente. Al insertar el elemento representado por el cuadrado rojo (cuadrado más
obscuro), se presenta un desbalance sobre el nodo B: ahora el balance para los nodos A y B es 1 y
2 respectivamente.

   Por otro lado, la figura (b) muestra la solución al desbalanceo descrito en el párrafo anterior.
Para visualizarlo mejor, imagine que en la figura (a), en el nodo representado por B existe una
polea fija, de tal forma que al "jalar" z hacia abajo, el subárbol izquierdo de B representado por A
sube, mientras que B baja convirtiéndose en el subárbol derecho de A. Note cómo y pasa de ser
subárbol derecho de A, a ser subárbol izquierdo de B.

   Para el caso de la rotación izquierda el proceso es análogo pero de manera simétrica, al de la


rotación derecha descrita en esta sección.

 Ejemplo: Considere el árbol AVL (asegúrese de que en efecto sea un árbol AVL y determine que el
balance de cada uno de los nodos que se presenta es correcto) que aparece en la siguiente figura
en (a):
Ejemplo de la aplicación de la rotación simple.

   La rotación simple derecha se presenta al insertar los elementos 1 o 3, los cuales se resaltan y
presentan en la figura (b).

   El nodo desbalanceado es el que contiene al elemento 8 (¿Por qué?). La aplicación del Caso 1 de
rotación dará como resultado el árbol AVL que aparece en la figura (c) dependiendo del elemento
(1 o 3) que se haya insertado, de tal forma que la rotación simple derecha se realiza sobre el nodo
que contiene al elemento 8 de la figura (b).

   Observe cómo la aplicación de la rotación simple corrige el balance general del árbol, de tal
forma que el balance obtenido es casi perfecto.

   Antes de continuar, asegúrese de comprender el proceso de rebalanceo aplicado a la figura


anterior, así como de determinar por su propia cuenta, el balance de cada uno de los nodos para
los tres incisos.

Rotación doble.

   El caso de rebalanceo que implica una rotación doble es un proceso un poco más elaborado que
el de la rotación simple, ya que como su nombre lo indica, implica dos rotaciones. La rotación
doble izquierda derecha se muestran en la siguiente figura:
Caso3: rotación doble izquierda derecha (adaptada de Wirth).

   Ante una situación como la que se presenta en la figura (a) la solución está dada por la figura (c).
Ahora bien, existe un paso intermedio entre éstas, mismo que está representado por la figura (b) y
es el que se explicará a continuación:

La figura (a) muestra, hasta antes de la inserción del elemento representado por el cuadrado rojo
(cuadrado más obscuro), un árbol AVL balanceado. El balance puede determinarse gráficamente
por los niveles representados por líneas horizontales punteadas: el balance para los nodos A, B y C
es 0, 0 y 1 respectivamente. Al insertar cualquiera de los elementos representados por el cuadrado
rojo (cuadrado más obscuro), se presenta un desbalance sobre el nodo C: ahora el balance para los
nodos A, B y C es -1, (1 o -1 según sea el elemento insertado) y 2 respectivamente.

Aunque C es el nodo desbalanceado, observe que el balance no se corrige si se realiza una


rotación derecha sobre C (asegúrese de comprobarlo). Por otro lado, note los signos de los
balances generados por la inserción del elemento que provoca el desbalance.

En base a lo anterior, la figura (b) muestra una rotación izquierda sobre A aunque el nodo A no
está desbalanceado. Note que el balance no se ha corregido todavía, ya que el balance de A es 0 o
1, el de B es 2 o 1, y el de C 2.

Ahora bien, partiendo de la figura (b), una nueva rotación derecha sobre C generará el árbol de la
figura (c) mejorando significativamente el balance general de la mayoría de los nodos.

    Asegúrese de comprender la doble rotación izquierda derecha explicada hasta aquí antes de
continuar.

   El caso de la rotación doble derecha izquierda es simétricamente análogo o lo descrito con
anterioridad.

También podría gustarte