Está en la página 1de 22

ARBOLES

AVL, RN

Karim Guevara Puente de la Vega


Agenda
 Árbol perfectamente equilibrado
 Árbol AVL
 Árbol RN
BST equilibrados
 Característica de BST
 Ventaja: inserción, eliminación y búsqueda  O(logn)
• n = número de niveles
 Desventaja: se pierde eficiencia cuando h  m y su
complejidad se iguala a la de las listas
 m = número de nodos
 h = altura del árbol
 Solución: hay que mantener el árbol equilibrado
 Equilibrio perfecto
 Otros tipos de equilibrio (AVL, arboles rojo-negros, etc.)
BST perfectamente equilibrados
 Equilibrio perfecto
 Para cada nodo, el número de nodos del subárbol
izquierdo y el número de nodos del subárbol derecho
difieren como máximo en 1 unidad
BST perfectamente equilibrado
• Desplazar la mitad de nodos que sobran de un lado al
otro.
• Mantener la condición de BST al desplazar los nodos
Desplazar a derechas:
1. Insertar la Raíz en el subárbol derecho
2. Colocar como Raíz al mayor del subárbol
izquierdo
3. Repetir 1 y 2 tantas veces como el número de
nodos a desplazar.
Desplazar a izquierdas: (simétrico)

 Operaciones auxiliares:
 equilibrar(NodoABB actual)
 desplazarDerecha(NodoABB actual, int cuantos)
 desplazarIzquierda(NodoABB actual, int cuantos)
 Modificar algoritmos de inserción/borrado
- Re-equilibrado se hace desde arriba hacia abajo
BST perfectamente equilibrados
Arboles AVL - Definición
 Un árbol AVL (Adelson-Velskii y Landis) es un árbol
binario de búsqueda equilibrado
 Para cada nodo, las alturas de sus subárboles izquierdo y
derecho no difieren en más de 1
 El coste de sus operaciones es, por lo tanto, logarítmico
 El algoritmo para mantener un árbol AVL equilibrado se
basa en reequilibrados locales, de modo que no es
necesario explorar todo el árbol después de cada
inserción o borrado
Arboles AVL – Factor de equilibrio
 Cada nodo, además del dato y de las referencias a su
subárbol izquierdo y derecho, tiene un nuevo atributo: el
factor de equilibrio
 El factor de equilibrio es la diferencia entre las alturas
del subárbol derecho y el izquierdo:
FE = HDer – HIzq

 Por definición, para un árbol AVL, este valor debe ser -1,
0ó1
Árboles AVL - reestructación
-1

1 65
-1
45 70
0 -1 0
33 54 68
0 RSR
50 Simple
RSL
Rotación
RDR
Compuesta
RDL
Árboles AVL – rotación simple derecha (RSR)
 Cuando el subárbol izquierdo de un nodo es 2 unidades
más alto que el derecho (FE = -2) y la raíz del subárbol
izquierdo tenga un FE = -1 (cargado a la izquierda)

P
Q
Árboles AVL – rotación simple derecha (RSR)
 Paso 1: el subárbol derecho de Q pasa a ser el subárbol
izquierdo de P

 Paso 2: el árbol P pasa a ser el subárbol derecho de Q:


Árboles AVL – rotación simple izquierda (RSL)
 Es el caso simétrico del anterior. Esta rotación se usa
cuando el subárbol derecho de un nodo es 2 unidades
más alto que el izquierdo y la raíz del subárbol derecho
está cargado a la derecha
Árboles AVL – rotación doble derecha (RDR)
 Cuando el subárbol izquierdo de un nodo es 2 unidades
más alto que el derecho (FE = -2) y la raíz del subárbol
izquierdo tenga un FE = 1 (cargado a la derecha)
P

R
Árboles AVL – rotación doble derecha (RDR)
 Paso 1: el subárbol izquierdo de R pasa a ser el
subárbol derecho de Q

 Paso 2: el árbol Q pasa a ser el subárbol izquierdo de R


Árboles AVL – rotación doble derecha (RDR)
 Paso 3: el subárbol derecho de R pasa a ser el subárbol
izquierdo de P

 Paso 4: el árbol P pasa a ser el subárbol derecho de R


Árboles AVL – rotación doble izquierda (RDL)
 Es el caso simétrico del anterior. Esta rotación se usa
cuando el subárbol derecho de un nodo es 2 unidades
más alto que el izquierdo y la raíz del subárbol derecho
está cargado a la izquierda
Pasos para la inserción
 Seguir el camino de búsqueda del árbol, hasta localizar
el lugar donde hay que insertar el elemento.
 Se inserta el elemento.
 A partir del punto de inserción, recalcular el FE de todos
los nodos que componen el camino por donde se
descendió.
 Si el factor de equilibrio cambio a 0, terminar el recalculo.
 Si en alguno de los nodos se viola el criterio de equilibrio entonces,
reestructurar el árbol.
Pasos a seguir para eliminar un nodo
 Localizar el nodo en el árbol.
 Eliminarlo siguiendo los criterios establecidos para el
BST.
 Regresar por el camino de búsqueda recalculando el FE
de los nodos visitados.
 Si el factor de equilibrio cambio a 1 o -1, terminar el proceso de recalculo.
 Si en alguno de los nodos se viola el criterio de equilibrio entonces,
reestructurar el árbol.
 Es posible que sea necesario más de una restructuración

 Si se ha llegado a la raíz, el proceso termina.


Clase NodeAVL

class NodeAVL<E> extends NodeBST<E> {


protected int fe;

public NodeAVL(E data, NodeAVL<E> left,


NodeAVL<E> right){
super(data,left,right);
this.fe = 0;
}
public NodeAVL(E data){
this (data, null, null);
}
}
node
Clase AVL hijo

class AVL<E extends Comparable<E>{


protected NodeAVL<E> root;
public AVL() { this.root = null; }
public void insert(E x);
public void remove(E x);
. . .
protected NodeAVL<E> rotateSR(NodeAVL<E> node){
NodeAVL<E> hijo = node.left;

node.left = hijo.right;
hijo.right = node;
node = hijo;
return node;
}
...
node
Clase AVL
hijo

class AVL<E extends Comparable<E>{


...

protected NodeAVL<E> rotateSL(NodeAVL<E> node){


NodeAVL<E> hijo = node.right;

node.right = hijo.left;
hijo.left = node;
node = hijo;
return node;
}
}
Investigar
 Investigue a cerca de los árboles Rojo Negro (RN):
 Que es un RN?

 Sus propiedades

 Operación se inserción, eliminación y búsqueda

 Formas de reestructurar el árbol

 Aspectos de su implementación

También podría gustarte