<ul><li>Especificación informal del Árbol Binario </li></ul><ul><ul><li>  </li></ul></ul><ul><li>ArbolBinario tiene las si...
<ul><li>OPERACIONES : </li></ul><ul><ul><li>crea() devuelve (A:CArbolB) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve el...
<ul><ul><li>OPERACIONES : </li></ul></ul><ul><ul><li>hijoDerecho(A: CArbolB; P: CnodoArb) devuelve (CnodoArb) </li></ul></...
<ul><ul><li>OPERACIONES </li></ul></ul><ul><ul><li>insertaDerecho(A: CArbolB; P: CnodoArb; E:  Cobjeto ) </li></ul></ul><u...
<ul><ul><li>OPERACIONES </li></ul></ul><ul><ul><li>modifica(A: CArbolB; P: CnodoArb; E:  Cobjeto ) </li></ul></ul><ul><ul>...
<ul><li>Como ejemplos de uso de árboles binarios veremos los esquemas de recorrido para estos.  Para árboles binarios, se ...
<ul><li>Inorden : </li></ul><ul><ul><li>Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos d...
<ul><li>Un  árbol binario de búsqueda  es un árbol binario formado por elementos en los cuales se asume un orden lineal, y...
<ul><li>Todas estas operaciones pueden realizarse en un tiempo de ejecución promedio  O( log n)  para un conjunto  de  n  ...
<ul><li>Especificación Informal </li></ul><ul><li>ArbolBinarioBusqueda   tiene  operaciones crea, destruye, vacio, inserta...
<ul><li>O peraciones </li></ul><ul><ul><li>vacio(A:ArbolBinarioBusqueda) devuelve (booleano) </li></ul></ul><ul><ul><ul><l...
 
Con el objeto de mejorar el rendimiento en la búsqueda surgen los árboles balanceados. La idea central de estos es la de r...
 
El Factor de Equilibrio (FE) o de Balance (FB) de un nodo se define como la altura del SAD menos la altura del SAI corresp...
Arbol Balanceado
Reestructuración de Arboles AVL  Reestructurar un árbol balanceado significa rotar los nodos del mismo. La rotación puede ...
 
 
CASO 1 . El SAI y el SAD del árbol balanceado tienen la misma altura (hSAD = hSAI): a) Si se inserta un elemento en SAI en...
CASO 2 . El SAI y el SAD del árbol balanceado tienen altura diferente (hSAD ≠ hSAI): CASO 2.1. Si hSAD > hSAI a) Si se ins...
CASO 2.2. Si hSAD < hSAI a) Si se inserta un elemento en SAI entonces el árbol debe ser reestructurado   Las ramas están d...
<ul><li>El proceso de inserción en un árbol balanceado consta de los </li></ul><ul><li>siguientes pasos: </li></ul><ul><li...
Ejemplo de Inserción de Nodos con Árboles AVL  Se insertara la siguiente secuencia:  65, 50, 23, 70, 82, 68 y 39
 
 
//NODO es de tipo puntero, BO es booleano indica que el árbol a crecido (falso), INFOR es de tipo //entero.  OTRO, NODO1, ...
si no:  Hacer  NODO2 = NODO1^.DER NODO^.IZQ = NODO2^.DER NODO2^.DER = NODO NODO1^.DER = NODO2^.IZQ NODO2^.IZQ =NODO1 1.1.1...
  1.1.3. Si INFOR > NODO^.INFO entonces:   Regresar a InsertarBalanceado con NODO^.DER, BO, e INFOR 1.1.3.1.  Si BO = VERD...
NODO^.DER = NODO2^.IZQ NODO2^.IZQ = NODO NODO1^.IZQ = NODO2^.DER NODO2^.DER = NODO1 1.1.3.1.1.1.A.  Si NODO2^.FE = 1 enton...
1.1.4. // Fin del paso 1.1.3. 1.2. //Fin del paso 1.1. Si no: CREAR NODO HACER NODO^.INFO =INFOR NODO^.IZQ = NULL NODO^.DE...
 
 
<ul><li>PASOS A SEGUIR PARA ELIMINAR UN NODO, EN UN ARBOL BALANCEADO. </li></ul><ul><li>Localizar su posición en el árbol....
 
 
 
 
 
 
 
 
 
 
Para hablar sobre Arboles AVL previamente a de haberse conocido el concepto de Árbol Binario de Búsqueda.  El problema de ...
Gracias a los científicos Adelson – Velsky y Landis, quedó resuelto este problema ya que idearon los árboles AVL, nombrado...
<ul><li>Es un árbol binario de búsqueda equilibrado. </li></ul><ul><li>Un árbol AVL es un ABB en donde las alturas de los ...
-Pero si se le agregar  3
- Quedaría así:
El inconveniente que presentan estos árboles, es que al realizar modificaciones sobre él (insertar o borrar) podemos perde...
  Los árboles AVL comparten las mismas operaciones básicas que el ABB, pero precedido o seguido por una o más de las llama...
Puesto que las inserciones involucran a un único nodo nuevo, los desequilibrios siempre significan que en uno (o mas) de l...
que está entre –1 y 1. – FB = 0 alturas de subárboles iguales. – FB =1 subárbol derecho más grande que izquierdo. – FB = -...
13 21 10 18 25 40 33 26 Al agregar el valor 26 el árbol cumple con las reglas de un AVL (el Factor de Balanceo de todos lo...
El reequilibrado se produce de abajo hacia arriba sobre los nodos en los que se produce el desequilibrio. Pueden darse dos...
<ul><li>Realizar la rotación </li></ul><ul><li>a la izquierda </li></ul>Baja Sube NODO PIVOTE : Es el nodo ancestro más ce...
5 3 2 Árbol balanceado A C B D
3 5 Raíz 7 Pívot <ul><li>Realizar la rotación  </li></ul><ul><li>a la derecha </li></ul>Baja Sube A C B D
3 5 7 Árbol balanceado A C B D
4 5 3 Pívot Raíz 2 Rotaciones simples Baja Sube A C B D
4 5 3 Pívot Raíz Baja Sube A C B D
4 5 3 A C B D
4 Pívot Raíz 5 3 Baja Sube C B D A
4 5 3 Pívot Raíz Baja Sube A C B D
4 5 3 A C B D
Próxima SlideShare
Cargando en…5
×

Lider zambrano 4to s

1.189 visualizaciones

Publicado el

Este es un conjunto de diapositivas resueltas con temas de la materia de estructuras de datos..
Espero que pueda ayudar a algunos..
Saludos..

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.189
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
22
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Lider zambrano 4to s

  1. 2. <ul><li>Especificación informal del Árbol Binario </li></ul><ul><ul><li>  </li></ul></ul><ul><li>ArbolBinario tiene las siguientes operaciones crea, vacio, raiz, padre, hijoIzquierdo, hijoDerecho, info, insertaIzquierdo, insertaDerecho, suprimeIzquierdo, suprimeDerecho, modifica, nodoNulo. </li></ul><ul><ul><li>  </li></ul></ul><ul><li>Descripcion : </li></ul><ul><ul><li>Los objetos de la clase CArbolB son arboles binarios donde cada nodo  contiene un dato  del tipo Cobjeto. Las los nodos en el árbol son del tipo CnodoArb. Los árboles son mutables: insertaIzquierdo, insertaDerecho, suprimeIzqquierdo, suprimeDerecho y modifica añaden, eliminan y modifican respectivamente elementos de un árbol. </li></ul></ul><ul><ul><li>  </li></ul></ul>
  2. 3. <ul><li>OPERACIONES : </li></ul><ul><ul><li>crea() devuelve (A:CArbolB) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve el árbol vacío A. </li></ul></ul></ul><ul><ul><li>vacio(A: CArbolB) devuelve (booleano) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve cierto si A es el árbol vacío, y falso en caso contrario. </li></ul></ul></ul><ul><ul><li>raiz(A: CArbolB) devuelve (CnodoArb) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve la referencia del nodo raíz en el árbol A. Si el árbol A está vacío, devuelve nulo </li></ul></ul></ul><ul><ul><ul><li>  </li></ul></ul></ul><ul><ul><li>padre(A: CArbolB; P: CnodoArb) devuelve (CnodoArb) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo. </li></ul></ul></ul><ul><ul><ul><li>efecto: Devuelve la referencia del nodo padre del nodo P en el árbol A. Si P es la raiz, devuelve nulo. </li></ul></ul></ul><ul><ul><li>hijoIzquierdo(A: CArbolB; P: CnodoArb) devuelve (CnodoArb)} </li></ul></ul><ul><ul><ul><li>r equerimientos: El árbol A es no vacío. El nodo P es no nulo . </li></ul></ul></ul><ul><ul><ul><li>efecto: Devuelve la referencia del nodo hijo izquierdo del nodo P en el árbol A. Si el nodo P no tiene hijo izquierdo, devuelve nulo . </li></ul></ul></ul>
  3. 4. <ul><ul><li>OPERACIONES : </li></ul></ul><ul><ul><li>hijoDerecho(A: CArbolB; P: CnodoArb) devuelve (CnodoArb) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo . </li></ul></ul></ul><ul><ul><ul><li>efecto: Devuelve la referencia del nodo hijo derecho del nodo P en el árbol A. Si el nodo P no tiene hijo derecho, devuelve nulo </li></ul></ul></ul><ul><ul><li>info(A: CArbolB; P: CnodoArb) devuelve (E: Cobjeto ) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo . </li></ul></ul></ul><ul><ul><ul><li>efecto: Devuelve en E el contenido del nodo P en el árbol A. </li></ul></ul></ul><ul><ul><li>insertaIzquierdo(A: CArbolB; P: CnodoArb; E: Cobjeto ) </li></ul></ul><ul><ul><ul><li>requerimientos: Si el árbol A es no vacío, entonces el nodo P es no nulo y el nodo hijo izquierdo de P es nulo </li></ul></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>efecto: Añade un nodo, con contenido E, como hijo izquierdo del nodo P en el árbol A. Si el árbol A es vacío, entonces añade un nodo con contenido E como raíz del árbol A. </li></ul></ul></ul>
  4. 5. <ul><ul><li>OPERACIONES </li></ul></ul><ul><ul><li>insertaDerecho(A: CArbolB; P: CnodoArb; E: Cobjeto ) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo. El nodo hijo derecho de P es nulo </li></ul></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>efecto: Añade un nodo, con contenido E, como hijo derecho del nodo P en el árbol A. </li></ul></ul></ul><ul><ul><li>suprimeIzquierdo(A: CArbolB; P: CnodoArb) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo . </li></ul></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>efecto: Suprime el hijo izquierdo del nodo P en el árbol A y todos sus descendientes. </li></ul></ul></ul><ul><ul><li>suprimeDerecho(A: CArbolB; P: CnodoArb) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo . </li></ul></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>e fecto: Suprime el hijo derecho del nodo P en el árbol A y todos sus descendientes. </li></ul></ul></ul>
  5. 6. <ul><ul><li>OPERACIONES </li></ul></ul><ul><ul><li>modifica(A: CArbolB; P: CnodoArb; E: Cobjeto ) </li></ul></ul><ul><ul><ul><li>requerimientos: El árbol A es no vacío. El nodo P es no nulo . </li></ul></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>efecto: Modifica el contenido del nodo P en el árbol A, cambiándolo por el nuevo contenido E. </li></ul></ul></ul><ul><ul><li>  </li></ul></ul><ul><ul><li>nodoNulo(P: CnodoArb) devuelve (booleano) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve cierto si P es nulo, y falso en caso contrario. </li></ul></ul></ul>
  6. 7. <ul><li>Como ejemplos de uso de árboles binarios veremos los esquemas de recorrido para estos. Para árboles binarios, se definen los recorridos en preorden, inorden y postorden de la siguiente forma: </li></ul><ul><li>Preorden: </li></ul><ul><ul><li>Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos del árbol binario en preorden. </li></ul></ul><ul><ul><li>Si el árbol binario no es vacío, el listado en preorden de sus nodos está formado, primero, por la raíz del árbol, seguido por los nodos del subárbol izquierdo en preorden, y finalmente, por los nodos del subárbol derecho en preorden. </li></ul></ul>
  7. 8. <ul><li>Inorden : </li></ul><ul><ul><li>Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos del árbol binario en inorden. </li></ul></ul><ul><ul><li>Si el árbol binario no es vacío, el listado en inorden de sus nodos está formado, primero, por los nodos del subárbol izquierdo en inorden, seguido por la raíz del árbol, y finalmente, por los nodos del subárbol derecho en inorden. </li></ul></ul><ul><li>Postorden : </li></ul><ul><ul><li>Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos del árbol binario en postorden. </li></ul></ul><ul><ul><li>Si el árbol binario no es vacío, el listado en postorden de sus nodos está formado, primero, por los nodos del subárbol izquierdo en postorden, luego por los nodos del subárbol derecho en postorden, y finalmente, por la raíz del árbol. </li></ul></ul>
  8. 9. <ul><li>Un árbol binario de búsqueda es un árbol binario formado por elementos en los cuales se asume un orden lineal, y éstos se organizan en el árbol de la forma: </li></ul><ul><ul><li>todos los elementos almacenados en el subárbol izquierdo de cualquier nodo son menores que el elemento almacenado en dicho nodo </li></ul></ul><ul><ul><li>todos los elementos almacenados en el subárbol derecho de cualquier nodo son mayores que el elemento almacenado en ese nodo </li></ul></ul><ul><li>Los árboles binarios de búsqueda se utilizan típicamente como estructura de datos para la representación de conjuntos con operaciones : </li></ul><ul><ul><li>i nserta , para insertar un elemento dado en un conjunto </li></ul></ul><ul><ul><li>s uprime , para suprimir un elemento determinado de un conjunto </li></ul></ul><ul><ul><li>m iembro , para saber si un elemento dado pertenece o no a un conjunto. </li></ul></ul>
  9. 10. <ul><li>Todas estas operaciones pueden realizarse en un tiempo de ejecución promedio O( log n) para un conjunto de n elementos. </li></ul><ul><li>Otras posibles operaciones que puede realizarse con el mismo tiempo de ejecución promedio usando árboles binarios de búsqueda son : </li></ul><ul><ul><li>m in , que devuelve el elemento mínimo de un árbol </li></ul></ul><ul><ul><li>suprime_min , que elimina el elemento mínimo de un árbol </li></ul></ul><ul><ul><li>m ax , que devuelve el elemento máximo de un árbol </li></ul></ul><ul><ul><li>suprime_max , que elimina el elemento máximo de un árbol </li></ul></ul>
  10. 11. <ul><li>Especificación Informal </li></ul><ul><li>ArbolBinarioBusqueda tiene operaciones crea, destruye, vacio, inserta, suprime, miembro. </li></ul><ul><li>Descripción: </li></ul><ul><ul><li>Los valores ArbolBinarioBusqueda son árboles binarios de búsqueda de elementos del tipo Cobjeto .  Los árboles binarios de búsqueda son mutables: inserta y suprime a ñ aden y eliminan elementos en el árbol respectivamente. </li></ul></ul><ul><li>O peraciones </li></ul><ul><ul><li>crea() devuelve (A:ArbolBinarioBusqueda) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve el árb o l binario de búsqueda vac í o A. </li></ul></ul></ul>
  11. 12. <ul><li>O peraciones </li></ul><ul><ul><li>vacio(A:ArbolBinarioBusqueda) devuelve (booleano) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve cierto si A es el árbol vac í o, y falso en caso contrario. </li></ul></ul></ul><ul><ul><li>inserta(A:ArbolBinarioBusqueda; E: Cobjeto ) </li></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>e fecto: Añade el elemento E al árbol binario de búsqueda A. </li></ul></ul></ul><ul><ul><li>suprime(A:ArbolBinarioBusqueda; E: Cobjeto ) </li></ul></ul><ul><ul><ul><li>modifica: A. </li></ul></ul></ul><ul><ul><ul><li>efecto: Suprime el elemento E, si existe, del árbol binario de búsqueda A. </li></ul></ul></ul><ul><ul><li>miembro(A:ArbolBinarioBusqueda; E: Cobjeto ) devuelve (booleano) </li></ul></ul><ul><ul><ul><li>efecto: Devuelve cierto si E es un elemento del árbol binario de búsqueda A, y falso en caso contrario. </li></ul></ul></ul>
  12. 14. Con el objeto de mejorar el rendimiento en la búsqueda surgen los árboles balanceados. La idea central de estos es la de realizar reacomodó o balanceos después de inserciones o eliminaciones de elementos. Estos árboles también nombrados recientemente AVL en honor a sus inventores, dos matemáticos rusos Adelson-Velskii y Landis.
  13. 16. El Factor de Equilibrio (FE) o de Balance (FB) de un nodo se define como la altura del SAD menos la altura del SAI correspondiente. El Factor de Equilibrio de cada nodo en un árbol balanceado será –1, 1 ó 0. Si FE llegara a tomar los valores de –2 ó 2, entonces debería reestructurarse el árbol . Factor de Equilibrio
  14. 17. Arbol Balanceado
  15. 18. Reestructuración de Arboles AVL Reestructurar un árbol balanceado significa rotar los nodos del mismo. La rotación puede ser simple o compuesta. En el primer tipo de rotación se involucran dos nodos y en el segundo, se afectan tres. Si la rotación es simple puede realizarse por las ramas derechas (RDD: Rotación Derecha Derecha) o por las ramas izquierdas (RII: Rotación Izquierda Izquierda). Si la rotación es compuesta puede realizarse por las ramas derecha e izquierda (RDI: Rotación Derecha Izquierda) o por las ramas izquierda y derecha (RID: Rotación Izquierda Derecha).
  16. 21. CASO 1 . El SAI y el SAD del árbol balanceado tienen la misma altura (hSAD = hSAI): a) Si se inserta un elemento en SAI entonces hSAD será menor que hSAI b) Si se inserta un elemento en SAD entonces hSAD será mayor que hSAI Ya sea para a) o para b), no se viola el criterio de equilibrio o balance del árbol . B C A B C A B C A CASO 1 1.b 1.a D D
  17. 22. CASO 2 . El SAI y el SAD del árbol balanceado tienen altura diferente (hSAD ≠ hSAI): CASO 2.1. Si hSAD > hSAI a) Si se inserta un elemento en SAI entonces hSAD será igual a hSAI Las ramas tienen la misma altura por lo que se mejora el equilibrio b) Si se inserta un elemento en SAD entonces el árbol debe ser reestructurado Las ramas están desequilibradas por lo que se requiere reestructuración B C A D B C A D E B C A D E CASO 2.1. 2.1.a. 2.1.b. F
  18. 23. CASO 2.2. Si hSAD < hSAI a) Si se inserta un elemento en SAI entonces el árbol debe ser reestructurado Las ramas están desequilibradas por lo que se requiere reestructuración b) Si se inserta un elemento en SAD entonces hSAD será igual a hSAI Las ramas tienen la misma altura por lo que se mejora el equilibrio Para poder determinar si un árbol está balanceado debe calcularse el FE de cada nodo del árbol. B C A D CASO 2.2 . B C A D 2.2.a . E B C A E D 2.2.b .
  19. 24. <ul><li>El proceso de inserción en un árbol balanceado consta de los </li></ul><ul><li>siguientes pasos: </li></ul><ul><li>Primero debe seguirse el camino de búsqueda del árbol, hasta localizar el lugar donde hay que insertar el elemento. </li></ul><ul><li>Se calcula su FE, que será cero (pues el elemento recién insertado posee SAI y SAD vacíos). Luego, se regresa por el camino de búsqueda calculando el FE de todos los demás nodos que componen el árbol. Si en alguno de los nodos se viola el criterio de equilibrio entonces debe reestructurarse el árbol. El proceso termina al llegar a la raíz del árbol, o cuando se realiza la reestructuración del mismo, en cuyo caso no es necesario determinar el FE de los nodos restantes. </li></ul>
  20. 25. Ejemplo de Inserción de Nodos con Árboles AVL Se insertara la siguiente secuencia: 65, 50, 23, 70, 82, 68 y 39
  21. 28. //NODO es de tipo puntero, BO es booleano indica que el árbol a crecido (falso), INFOR es de tipo //entero. OTRO, NODO1, NODO2 son variables auxiliares de tipo puntero insertaBalanceado(NODO, BO, INFOR) { 1. Si NODO ≠null entonces 1.1. Si INFOR < NODO^.INFO entonces: 1.1.1. Si BO = VERDADERO entonces: 1.1.1.1. Si NODO^.FE = 1: Hacer NODO^.FE=0 y BO=falso =0 : Hacer NODO^.FE = -1 = -1 : Hacer NODO1 = NODO^.IZQ //{Restructuración del árbol} 1.1.1.1.1. Si NODO1^.FE ≤ 0 entonces: //{Rotacion II} Hacer NODO^.IZQ =NODO^.DER NODO1^.DER = NODO NODO^.FE = 0 y NODO = NODO1 //{ Termina la rotacion II}
  22. 29. si no: Hacer NODO2 = NODO1^.DER NODO^.IZQ = NODO2^.DER NODO2^.DER = NODO NODO1^.DER = NODO2^.IZQ NODO2^.IZQ =NODO1 1.1.1.1.2.A. Si NODO2^.FE = -1 entonces: Hacer NODO^.FE =1 si no: Hacer NODO^.FE = 0 1.1.1.1.2.B. //{Fin del paso 1.1.1.1.1.A.} 1.1.1.1.2.C. Si NODO2^.FE =1 entonces: Hacer NODO1^.FE = -1 si no : Hacer NODO1^.FE = 0 1.1.1.1.2.D // Fin del paso 1.1.1.1.1.C. Hacer: NODO = NODO2 //Termina rotacionID 1.1.1.1.2. // Fin del paso 1.1.1.1.1 Hacer NODO^.FE = 0 y BO = falso 1.1.1.2. // Fin del paso 1.1.1.1. 1.1.2. //Fin del paso 1.1.1. SI NO :
  23. 30. 1.1.3. Si INFOR > NODO^.INFO entonces: Regresar a InsertarBalanceado con NODO^.DER, BO, e INFOR 1.1.3.1. Si BO = VERDADERO entonces: 1.1.3.1.1. Si NODO^.FE = -1: Hacer NODO^.FE = 0 y BO= FALSO = 0: Hacer NODO^.FE =1 = 1 : Hacer NODO1= NODO^.DER // restructuracion del arbol 1.1.3.1.1.1. Si NODO^.FE ≥ 0 entonces: //rotacio DD Hacer: NODO^.DER = NODO^.IZQ NODO^.IZQ = NODO NODO^.FE = 0 y NODO = NODO1 // termina rotacionDI Si no: //Rotacion DI Hacer: NODO2 = NODO1^.IZQ
  24. 31. NODO^.DER = NODO2^.IZQ NODO2^.IZQ = NODO NODO1^.IZQ = NODO2^.DER NODO2^.DER = NODO1 1.1.3.1.1.1.A. Si NODO2^.FE = 1 entonces: Hacer NODO^.FE = -1 si no: Hacer NODO^.FE = 0 1.1.3.1.1.1.B // fin del paso 1.1.3.1.1.1.A. 1.1.3.1.1.1C. Si NODO2^.FE = -1 entonces: Hacer NODO1^.FE =1 Si no: Hacer NODO1^.FE = 0 1.1.3.1.1.1.D. //Fin del paso 1.1.3.1.1.1.C. 1.1.3.1.1.2. // fin del paso 1.1.3.1.1.1. Hacer NODO^.FE = 0 y BO=falso 1.1.3.1.2. // Fin del paso 1.1.3.1.1. 1.1.3.2. // Fin del paso 1.1.3.1. Si No: Escribir “ El nodo ya se encuentra en el arbol” 1.1.4 // Fin del paso 1.1.3
  25. 32. 1.1.4. // Fin del paso 1.1.3. 1.2. //Fin del paso 1.1. Si no: CREAR NODO HACER NODO^.INFO =INFOR NODO^.IZQ = NULL NODO^.DER = NULL NODO^.FE = 0 BO = VERDADERO 2. // Fin del paso 1
  26. 35. <ul><li>PASOS A SEGUIR PARA ELIMINAR UN NODO, EN UN ARBOL BALANCEADO. </li></ul><ul><li>Localizar su posición en el árbol. </li></ul><ul><li>Eliminarlo siguiendo los criterios establecidos previamente. </li></ul><ul><li>Regresar por el camino de búsqueda calculando el FE de los nodos visitados. </li></ul><ul><li>Si en alguno de los nodos se viola el criterio de equilibrio, entonces debe reestructurarse el árbol. </li></ul><ul><li>El proceso concluye una vez que se llega hasta la raíz del árbol. </li></ul>
  27. 46. Para hablar sobre Arboles AVL previamente a de haberse conocido el concepto de Árbol Binario de Búsqueda. El problema de estos tipos de estructuras es pueden producirse Arboles degenerados o parcialmente degenerados, por lo que la búsqueda de un elemento puede llegar a ser de un orden de 0(log n) y en el peor caso llegar a tener un orden de 0(n).
  28. 47. Gracias a los científicos Adelson – Velsky y Landis, quedó resuelto este problema ya que idearon los árboles AVL, nombrados de esta forma en su honor, o balanceados en altura.
  29. 48. <ul><li>Es un árbol binario de búsqueda equilibrado. </li></ul><ul><li>Un árbol AVL es un ABB en donde las alturas de los hijos izquierdo y derecho solo pueden diferir a lo máximo en uno. </li></ul>
  30. 49. -Pero si se le agregar 3
  31. 50. - Quedaría así:
  32. 51. El inconveniente que presentan estos árboles, es que al realizar modificaciones sobre él (insertar o borrar) podemos perder el equilibrio, por lo que tendremos que proceder al equilibrado del árbol mediante rotaciones.
  33. 52. Los árboles AVL comparten las mismas operaciones básicas que el ABB, pero precedido o seguido por una o más de las llamadas &quot;rotaciones AVL&quot;.
  34. 53. Puesto que las inserciones involucran a un único nodo nuevo, los desequilibrios siempre significan que en uno (o mas) de los nodos del árbol se produce una diferencia de altura entre su subárbol izquierdo y su subárbol derecho que es 2 o −2. Así pues, después de insertar en el árbol, la detección del desequilibrio es fácil, basta con examinar el campo balance. Si el balance es −2, es que hemos insertado un nuevo nodo en el subárbol izquierdo, y si es 2, la inserción tuvo lugar en el subárbol derecho.
  35. 54. que está entre –1 y 1. – FB = 0 alturas de subárboles iguales. – FB =1 subárbol derecho más grande que izquierdo. – FB = -1 subárbol izquierdo más grande que derecho Para realizar la inserción, se realiza igual que en un árbol binario y después se verifica el balanceo odos tienen un Factor de Balance (FB) que está entre –1 y 1. – FB = 0 alturas de subárbols iguales. – FB =1 subárbol derecho más grande que izquierdo. – FB = -1 subárbol izquierdo más grande que derecho Para realizar la inserción, se realiza igual que en un árbol binario y después se verifica el balanceo <ul><li>Los nodos tienen un Factor de Balance (FB) </li></ul><ul><li>que está entre –1 y 1. </li></ul><ul><li>FB= Altura del subárbol derecho – Altura del subárbol izquierdo </li></ul><ul><li>FB = 0 alturas de subárbols iguales. </li></ul><ul><li>FB =1 subárbol derecho más grande que izquierdo. </li></ul><ul><li>FB = -1 subárbol izquierdo más grande que derecho </li></ul><ul><li>Para realizar la inserción, se realiza igual que </li></ul><ul><li>en un árbol binario y después se verifica el balanceo. </li></ul>
  36. 55. 13 21 10 18 25 40 33 26 Al agregar el valor 26 el árbol cumple con las reglas de un AVL (el Factor de Balanceo de todos los nodos es 0, 1 ó –1) . 13 21 10 18 25 40 33 26 26 26 27 Al agregar el valor 27 el árbol se DESBALANCEÓ (el Factor de Balanceo para el nodo con el valor 25 ahora es 2). Se requiere una ROTACIÓN.
  37. 56. El reequilibrado se produce de abajo hacia arriba sobre los nodos en los que se produce el desequilibrio. Pueden darse dos casos: rotación simple o rotación doble; a su vez ambos casos pueden ser hacia la derecha o hacia la izquierda.
  38. 57. <ul><li>Realizar la rotación </li></ul><ul><li>a la izquierda </li></ul>Baja Sube NODO PIVOTE : Es el nodo ancestro más cercano del nodo recién insertado cuyo Factor de Balanceo es diferente de cero. 5 3 2 A C B D Pívot Raíz
  39. 58. 5 3 2 Árbol balanceado A C B D
  40. 59. 3 5 Raíz 7 Pívot <ul><li>Realizar la rotación </li></ul><ul><li>a la derecha </li></ul>Baja Sube A C B D
  41. 60. 3 5 7 Árbol balanceado A C B D
  42. 61. 4 5 3 Pívot Raíz 2 Rotaciones simples Baja Sube A C B D
  43. 62. 4 5 3 Pívot Raíz Baja Sube A C B D
  44. 63. 4 5 3 A C B D
  45. 64. 4 Pívot Raíz 5 3 Baja Sube C B D A
  46. 65. 4 5 3 Pívot Raíz Baja Sube A C B D
  47. 66. 4 5 3 A C B D

×