Árbol AVL
Un árbol AVL es un árbol binario de búsqueda que cumple con la
condición de que la diferencia entre las alturas de los subárboles de cada uno de sus
nodos es, como mucho 1.
La denominación de árbol AVL viene dada por los creadores de tal estructura
(Adelson-Velskii y Landis).
La propiedad de equilibrio que debe cumplir un árbol para ser AVL asegura que la
profundidad del árbol sea O(log(n)), por lo que las operaciones sobre estas estructuras
no deberán recorrer mucho para hallar el elemento deseado. Como se verá, el tiempo
de ejecución de las operaciones sobre estos árboles es, a lo sumo O(log(n)) en el peor
caso, donde n es la cantidad de elementos del árbol.
Consideraciones sobre la implementación del tipo de dato abstracto
- La única diferencia de los nodos de un árbol AVL con los de un árbol binario común es la variable altura en la estructura nodo.
- Los nodos de un árbol pueden almacenar cualquier tipo de dato, arbitrariamente complejo. En este documento, por razones de simplicidad se usará el tipo de dato más simple que soporte comparaciones, o sea los enteros (tipo int de Ansi C). En el caso de que los datos almacenados en cada nodo sean más complicados (por ejemplo estructuras) o sean dinámicamente almacenados en memoria, algunas funciones
cuando un árbol avl pierde su equilibrio, se le aplican varios tipos de rotaciones dependiendo en donde perdió es equilibrio
Algunas son:
Rotación simple:
- Derecha
- Izquierda
Rotación doble:
- Izquierda
- Derecha
Balance del árbol
Cada vez que se modifique el árbol, corremos el riesgo de que pierda su propiedad de equilibrio en
alguno de sus nodos, la cual debe conservarse si queremos obtener tiempos de
ejecución de orden O(log(n)) en el peor de los casos.
La idea general que se utiliza en esta implementación de árboles AVL para
implementar los algoritmos de inserción y de eliminación de nodos sobre un AVL es:
- Efectuar los algoritmos de igual forma que en los árboles binarios de búsqueda pero, en cada recursión ir actualizando las alturas y rebalanceando el árbol en caso de que sea necesario.
Fuente:
http://es.tldp.org/Tutoriales/doc-programacion-arboles-avl/avl-trees.pdf
Comentarios
Publicar un comentario