ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Un árbol AVL


Enviado por   •  26 de Abril de 2015  •  517 Palabras (3 Páginas)  •  254 Visitas

Página 1 de 3

ESTRUCTURA DE DATOS

ARBOLES AVL(Equilibrar arboles AVL)

ALUMNO:

John Leiva

Febrero De 2015

Marco Teorico:

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). Recordamos que un árbol binario de búsqueda es un árbol binario en el cual cada nodo cumple con que todos los nodos de su subárbol izquierdo son menores que la raíz y todos los nodos del subárbol derecho son mayores que la raíz. Recordamos también que el tiempo de las operaciones sobre un árbol binario de búsqueda son O(log n) promedio, pero el peor caso es O(n), donde n es el número de elementos. 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 operaciónes sobre estos árboles es, a lo sumo O(log(n)) en el peor caso, donde n es la cantidad de elementos del árbol. Sin embargo, y como era de esperarse, esta misma propiedad de equilibrio de los árboles AVL implica una dificultad a la hora de insertar o eliminar elementos: estas operaciones pueden no conservar dicha propiedad.

Código de programa

typedef struct AVLNode AVLTree;

struct AVLNode { int dato;

AVLTree izq; AVLTree der; int altura;

};

void rotar_s (AVLTree ** t, bool izq);

/* realiza una rotación simple del árbol t el cual se ➋ pasa por referencia. La rotación será izquierda sii. (izq==true) o será derecha sii.

(izq==false). Nota: las alturas de t y sus subárboles serán actualizadas dentro de esta función! Precondición: si (izq==true) ==> !es_vacio(izquierdo(t)

) si (izq==false) ==> !es_vacio(derecho(t)) */

void rotar_s (AVLTree ** t, bool izq)

{ AVLTree *t1; if (izq) /* rotación izquierda */

{ t1 = izquierdo (*t); (*t)->izq = derecho (t1); t1->der = *t; }

else /* rotación derecha */ { t1 = derecho (*t); (*t)->der = izquierdo (t1)

;

...

Descargar como (para miembros actualizados)  txt (3.1 Kb)  
Leer 2 páginas más »
Disponible sólo en Clubensayos.com