SlideShare una empresa de Scribd logo
Árboles Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes (mmontesg@inaoep.mx) Claudia Feregrino (cferegrino@inaoep.mx)
Contenido de la sección Árbol genérico Definición y representación Árboles binarios Definición, implementación y recorridos Árboles binarios de Búsqueda Definición y principales operaciones (insertar, eliminar, buscar) Árboles AVL (balanceados)
¿qué es un árbol? Un árbol puede definirse de forma  recursiva  como: Una colección de nodos que puede ser vacía, o que en su defecto consiste de un nodo  raíz   R  y un número finito de estructuras tipo árbol  T 1 ,…, T k , llamados  subárboles , los cuales son disjuntos y sus respectivos nodos raíz están conectados a R.  Por tanto, un árbol es una  estructura no secuencial .
Ejemplo de un árbol A B D G H I C E F
Nomenclatura básica Todo nodo  n j , exceptuando el raíz, está conectado exclusivamente a otro nodo  n k  donde: n j  es el padre de  n k   (e.g.,  B  es el padre de  E ) n k  es uno de los hijos de  n j  (e.g.,  E  es un hijo de  B ) Nodos con el mismo padre son “ hermanos ” Nodos sin hijos son llamados “ hojas ” Si existe una trayectoria del nodo  n j   al nodo  n k   entonces: n j  es antecesor de  n k  (e.g.,  A  es antecesor de  E ) n k  es descendiente de  n j  (e.g.,  E  es descendiente de  E )
Más nomenclatura La trayectoria del nodo  n 1  a  n k   se define como la secuencia de nodos  n 1 , n 2 ,…, n k , tal que  n i  es el padre de  n i+1 . Entonces: La  longitud  de una trayectoria es el número de ramas recorridas, es decir,  K -1. Nivel o  profundidad  del nodo  n i  es la longitud de la trayectoria que va del nodo raíz a  n i . C tiene profundidad 1, mientras que I tiene profundidad 2. La  altura  del nodo  n i  es longitud de la trayectoria más larga de  n i  a una hoja. G tiene altura 0, B altura 1 y A (raíz) altura 2.
Implementación typedef struct { TipoDato dato; struct NodoArbol  *hijo1 ; struct NodoArbol  *hijo2 ; : struct NodoArbol  *hijoN ; } NodoArbol; typedef struct { TipoDato  dato ; struct NodoArbol  *hijo ; struct NodoArbol  *hermano ; } NodoArbol; Dos formas de implementar: Tener un apuntador a cada uno de los hijos. Problema cuando NO sabemos el número de hijos. Mantener los hijos de un nodo en una lista ligada. No hay ninguna restricción sobre número de hijos. Así, un nodo del árbol consiste en un  dato , un  apuntador al primer hijo  y un  apuntador a la lista de hermanos .
Ejemplo de representación ¿cómo lo podemos recorrer? ¿cómo hacemos búsqueda en anchura? ¿cómo hacemos búsqueda en profundidad? A B D G H I C E F
Árboles binarios Un árbol binario en un árbol en el cual cada nodo puede tener como  máximo dos hijos . Recursivamente  un árbol binario puede definirse como: un árbol vacío, o un nodo raíz con un subárbol izquierdo y un subárbol derecho.  Raíz Árbol izquierdo Árbol derecho
Implementación typedef struct NodoArbol *Arbol; struct NodoArbol { TipoDatol  dato ; struct NodoArbol  *izq ; struct NodoArbol  *der ; }; Cada nodo del árbol consiste en: Un dato (cualquier cosa) Un apuntador al hijo izquierdo Un apuntador al hijo derecho Inicialmente el nodo raíz apunta a NULL. En las hojas del árbol, los apuntadores hacia los hijos izquierdo y derecho son NULL.
Recorridos estándar Preorder :  Procesar nodo Procesar árbol izquierdo Procesar árbol derecho Inorder : Procesar árbol izquierdo Procesar nodo Procesar árbol derecho Postorder : Procesar árbol izquierdo Procesar árbol derecho Procesar nodo void  inorder (Arbol *nodo) { if (nodo != NULL) { inorder (nodo->izq); visitar(nodo) ; inorder (nodo->der); } }  void postorder(Arbol *nodo) { if (nodo != NULL) { postorder(nodo->izq); postorder(nodo->der); visitar(nodo) ; } }
Ejemplo de recorridos Preorden : A, B, D, E, C, F, G Inorden : D, B, E, A, F, C, G Postorden : D, E, B, F, G, C, A A B C F G D E
Árbol binario de búsqueda Es una árbol: Una colección de nodos que puede ser vacía, o que en su defecto consiste de un nodo  raíz   R  y un número finito de estructuras tipo árbol  T 1 ,…, T k , llamados subárboles, los cuales son disjuntos y sus respectivos nodos raíz están conectados a R.  Es binario: Cada nodo puede tener como  máximo dos hijos , en otras palabras, cada nodo sólo puede tener dos subárboles. Es de búsqueda porqué: Los  nodos están ordenados  de manera conveniente para la búsqueda. Todas las datos del subárbol izquierdo son menores que el dato del nodo raíz, y todas los datos del subárbol derecho son mayores.
Ejemplos ¿son todos árboles binarios de búsqueda? 6 2 8 3 1 4 6 2 8 3 1 4 7 2 7 1 8 6 5 4
Operación BUSCAR boolean buscar(Arbol *nodo, int elem) { if (nodo == NULL) return FALSE; else if (nodo->dato < elem) return  buscar(nodo->izq, elem); else if (nodo->dato > elem) return  buscar(nodo->der, elem); else return TRUE; } 6 2 8 3 1 4 Buscando 4: VERDADERO Buscando 7: FALSO
Operación INSERTAR void insertar(Arbol *nodo, int elem){ if (nodo == NULL) { nodo = (Arbol *) malloc(sizeof(Arbol)); nodo->dato = elem; nodo->izq = nodo->der = NULL; } else if (elem < nodo->dato)  nodo-izq = insertar(nodo->izq, elem); else if (elem > nodo->dato) nodo->der = insertar(nodo->der, elem); return nodo ; }  6 2 8 3 1 4 5 Insertando 5
Operación ELIMINAR (1) Existen cuatro distintos escenarios: Intentar eliminar un nodo que no existe. No se hace nada, simplemente se regresa FALSE. Eliminar un nodo hoja. Caso sencillo; se borra el nodo y se actualiza el apuntador del nodo padre a NULL. Eliminar un nodo con un solo hijo. Caso sencillo; el nodo padre del nodo a borrar se convierte en el padre del único nodo hijo.  Eliminar un nodo con dos hijos. Caso complejo, es necesario mover más de un apuntador.
ELIMINAR (casos sencillos)  6 2 8 3 1 4 Eliminar nodo hoja Eliminar 3 Eliminar nodo con un hijo Eliminar 4 6 2 8 3 1 4
ELIMINAR (Caso complejo) 6 2 8 3 1 4 5 6 3 8 3 1 4 5 Eliminar nodo con dos hijos Eliminar 2 eliminar copiar valor Remplazar el dato del nodo que se desea eliminar con el dato del  nodo más pequeño del subárbol derecho Después, eliminar el nodo más pequeño del subárbol derecho ( caso fácil )
Otro ejemplo (caso complejo) 6 2 8 3 1 4 5 3.5 Eliminar nodo con dos hijos Eliminar 2 6 3 8 3 1 4 5 3.5
Implementación ELIMINAR void eliminar(Arbol *nodo, int elem) { Arbol *aux, * hijo;  if (nodo == NULL) return;  /* no existe nodo */ /* recorrer árbol hasta encontrar elem */ else if (elem < nodo->dato) nodo-izq = eliminar(nodo->izq, elem); else if (elem > nodo->dato) nodo->der = eliminar(nodo->der, elem); else  /* encontramos el elemento */  /* tiene dos hijos */ if (nodo->izq && nodo->derecho){ aux =  enontrar_min (nodo->der); nodo->dato = aux->dato; nodo->der =  eliminar(   nodo->der; nodo->dato); } /* un solo hijo */ else { aux = nodo; if (nodo->izq == NULL)  hijo = nodo->der ;  if (nodo->der == NULL)  hijo = nodo->izq ; free(aux) ; return hijo ; } } return nodo; }
Árboles desbalanceados La figura muestra un árbol binario de búsqueda, sin embargo éste  NO facilita la búsqueda  de elementos. El problema es que está muy  desbalanceado . La solución es balancearlo, y con ello asegurar que asegurar que tiempo promedio de búsqueda sea de O(log 2 N ). 2 7 1 8 6 5 4
Árboles AVL Propuestos por  A delson- V elskii and  L andis. Árboles binarios con una condición de balance. Esta condición es usada para asegurar que en todo momento la altura del árbol es O(log 2 N ). Condición de balance : para cada nodo del árbol, las alturas de sus subárboles izquierdo y derecho sólo pueden diferir como máximo en 1. La condición de balance debe mantenerse  después de cada operación  de inserción o eliminación.
¿son árboles AVL? 0,0 1,0 0,0 1,2 3,2 1,0 0,0 5 6 2 8 3 1 4 6 2 8 3 1 4 7 0,0 1,1 0,0 1,2 3,1 0,0 0,0
Construcción de un árbol AVL Cuando se inserta un nodo se modifican las condiciones de balance en la  trayectoria hacia la raíz . Si se presenta una desbalance, entonces es necesario hacer algunas  modificaciones al árbol . Dos tipos de modificaciones: Rotación simple Rotación doble 5 6 2 8 1 4 3,1
Rotación simple X K 1 K 2 Y Z X K 1 K 2 Y Z Z K 1 K 2 Y X K 2 K 1 Y Z X
Ejemplo rotación simple 4 2 5 6 1 3 2 1 4 3 6 5
NO siempre es suficiente ¡tenemos un caso de “pata de perro”! 6 2 8 3 1 4 2 1 6 3 4 8
Rotación doble K 1 K 3 D A K 2 B C K 1 K 3 A D K 2 B C K 1 K 3 D A K 2 B C K 3 K 1 D A K 2 B C
Ejemplo doble rotación 2 6 1 3 5 4 14 7 15 k 3 k 1 k 2 13 2 7 1 3 6 4 14 5 15 13

Más contenido relacionado

PPT
1 árbol
PPTX
Programacion estructura de arboles en c
PPT
3 estructuras no lineales estáticas y dinámicas
PPT
2 arboles
PPTX
PDF
Arboles Binarios
PDF
5. arboles binarios
PDF
Árboles binarios
1 árbol
Programacion estructura de arboles en c
3 estructuras no lineales estáticas y dinámicas
2 arboles
Arboles Binarios
5. arboles binarios
Árboles binarios

Destacado (20)

PDF
Egészséges életmód 1
DOCX
Unidad 4
PPT
Estonia
PPT
Computacion windows mac
PPTX
Act 19 dahe
PPT
Prezentare audio optica februarie 2012
DOCX
Underslore ita
PPT
Uso de imágenes en la enseñanza una guía rápida2
PPTX
Apuntes verbos irregulares ir y ser en el preterito
PPS
Os 12 piores do mundo
PPTX
Cartea nunţii pîrvu cătălin
PDF
Conceptos básicos de redes
DOC
Creativitatea abordari teoretice.doc
PPTX
Embarazos adolecentes
DOCX
Acidos nucleicos
PPTX
How to Assemble Potato Lasagna
DOC
Adrian paunescu
PPS
La mia sera - Giovanni Pascoli
PPTX
Mi primera observacion
Egészséges életmód 1
Unidad 4
Estonia
Computacion windows mac
Act 19 dahe
Prezentare audio optica februarie 2012
Underslore ita
Uso de imágenes en la enseñanza una guía rápida2
Apuntes verbos irregulares ir y ser en el preterito
Os 12 piores do mundo
Cartea nunţii pîrvu cătălin
Conceptos básicos de redes
Creativitatea abordari teoretice.doc
Embarazos adolecentes
Acidos nucleicos
How to Assemble Potato Lasagna
Adrian paunescu
La mia sera - Giovanni Pascoli
Mi primera observacion
Publicidad

Similar a 04 curso-prope-py ed-arboles (20)

PDF
Tema6-Arboles.pdf
PPT
áRboles binarios
PPT
áRboles binarios
PPT
PPT
12. Arboles.ppt
PPT
Arblores en C++ para el uso e implementacion de los mismos.
PPTX
Arboles_Java 1111111111111111 teoria .pptx
PPTX
Iv unidad estructuras no lineales
PDF
TEMA 3 GRAFOS Y ARBOLES programaciónavanzada.pdf
PPTX
Estructuras no lineales de la unidad 4
DOCX
Para leer estructuras
DOCX
Para leer estructuras
PDF
Árboles binarios, ABB y AVL
PPT
Arboles ppt
PPTX
Estructura de dato unidad 4
PPTX
Arboles binarios
Tema6-Arboles.pdf
áRboles binarios
áRboles binarios
12. Arboles.ppt
Arblores en C++ para el uso e implementacion de los mismos.
Arboles_Java 1111111111111111 teoria .pptx
Iv unidad estructuras no lineales
TEMA 3 GRAFOS Y ARBOLES programaciónavanzada.pdf
Estructuras no lineales de la unidad 4
Para leer estructuras
Para leer estructuras
Árboles binarios, ABB y AVL
Arboles ppt
Estructura de dato unidad 4
Arboles binarios
Publicidad

Último (20)

DOC
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
PPTX
MATEMATICAS GEOMETRICA USO TRANSPORTADOR
PDF
Modelo Educativo SUB 2023versión final.pdf
PDF
2.0 Introduccion a processing, y como obtenerlo
DOCX
PLANES DE área ciencias naturales y aplicadas
PDF
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
PDF
Nadie puede salvarte excepto Tú - Madame Rouge Ccesa007.pdf
DOCX
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
PPTX
T2 Desarrollo del SNC, envejecimiento y anatomia.pptx
PPTX
Presentación de la Cetoacidosis diabetica.pptx
PDF
Esc. Sab. Lección 7. El pan y el agua de vida.pdf
PDF
informe tipos de Informatica perfiles profesionales _pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Introducción a la historia de la filosofía
DOC
Manual de Convivencia 2025 actualizado a las normas vigentes
PDF
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
PDF
RM2025 - FUNDAMENTOS TEÓRICOS - PEDIATRÍA.pdf
PDF
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
PDF
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
MATEMATICAS GEOMETRICA USO TRANSPORTADOR
Modelo Educativo SUB 2023versión final.pdf
2.0 Introduccion a processing, y como obtenerlo
PLANES DE área ciencias naturales y aplicadas
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
Nadie puede salvarte excepto Tú - Madame Rouge Ccesa007.pdf
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
T2 Desarrollo del SNC, envejecimiento y anatomia.pptx
Presentación de la Cetoacidosis diabetica.pptx
Esc. Sab. Lección 7. El pan y el agua de vida.pdf
informe tipos de Informatica perfiles profesionales _pdf
Escuelas Desarmando una mirada subjetiva a la educación
Introducción a la historia de la filosofía
Manual de Convivencia 2025 actualizado a las normas vigentes
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
RM2025 - FUNDAMENTOS TEÓRICOS - PEDIATRÍA.pdf
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf

04 curso-prope-py ed-arboles

  • 1. Árboles Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes (mmontesg@inaoep.mx) Claudia Feregrino (cferegrino@inaoep.mx)
  • 2. Contenido de la sección Árbol genérico Definición y representación Árboles binarios Definición, implementación y recorridos Árboles binarios de Búsqueda Definición y principales operaciones (insertar, eliminar, buscar) Árboles AVL (balanceados)
  • 3. ¿qué es un árbol? Un árbol puede definirse de forma recursiva como: Una colección de nodos que puede ser vacía, o que en su defecto consiste de un nodo raíz R y un número finito de estructuras tipo árbol T 1 ,…, T k , llamados subárboles , los cuales son disjuntos y sus respectivos nodos raíz están conectados a R. Por tanto, un árbol es una estructura no secuencial .
  • 4. Ejemplo de un árbol A B D G H I C E F
  • 5. Nomenclatura básica Todo nodo n j , exceptuando el raíz, está conectado exclusivamente a otro nodo n k donde: n j es el padre de n k (e.g., B es el padre de E ) n k es uno de los hijos de n j (e.g., E es un hijo de B ) Nodos con el mismo padre son “ hermanos ” Nodos sin hijos son llamados “ hojas ” Si existe una trayectoria del nodo n j al nodo n k entonces: n j es antecesor de n k (e.g., A es antecesor de E ) n k es descendiente de n j (e.g., E es descendiente de E )
  • 6. Más nomenclatura La trayectoria del nodo n 1 a n k se define como la secuencia de nodos n 1 , n 2 ,…, n k , tal que n i es el padre de n i+1 . Entonces: La longitud de una trayectoria es el número de ramas recorridas, es decir, K -1. Nivel o profundidad del nodo n i es la longitud de la trayectoria que va del nodo raíz a n i . C tiene profundidad 1, mientras que I tiene profundidad 2. La altura del nodo n i es longitud de la trayectoria más larga de n i a una hoja. G tiene altura 0, B altura 1 y A (raíz) altura 2.
  • 7. Implementación typedef struct { TipoDato dato; struct NodoArbol *hijo1 ; struct NodoArbol *hijo2 ; : struct NodoArbol *hijoN ; } NodoArbol; typedef struct { TipoDato dato ; struct NodoArbol *hijo ; struct NodoArbol *hermano ; } NodoArbol; Dos formas de implementar: Tener un apuntador a cada uno de los hijos. Problema cuando NO sabemos el número de hijos. Mantener los hijos de un nodo en una lista ligada. No hay ninguna restricción sobre número de hijos. Así, un nodo del árbol consiste en un dato , un apuntador al primer hijo y un apuntador a la lista de hermanos .
  • 8. Ejemplo de representación ¿cómo lo podemos recorrer? ¿cómo hacemos búsqueda en anchura? ¿cómo hacemos búsqueda en profundidad? A B D G H I C E F
  • 9. Árboles binarios Un árbol binario en un árbol en el cual cada nodo puede tener como máximo dos hijos . Recursivamente un árbol binario puede definirse como: un árbol vacío, o un nodo raíz con un subárbol izquierdo y un subárbol derecho. Raíz Árbol izquierdo Árbol derecho
  • 10. Implementación typedef struct NodoArbol *Arbol; struct NodoArbol { TipoDatol dato ; struct NodoArbol *izq ; struct NodoArbol *der ; }; Cada nodo del árbol consiste en: Un dato (cualquier cosa) Un apuntador al hijo izquierdo Un apuntador al hijo derecho Inicialmente el nodo raíz apunta a NULL. En las hojas del árbol, los apuntadores hacia los hijos izquierdo y derecho son NULL.
  • 11. Recorridos estándar Preorder : Procesar nodo Procesar árbol izquierdo Procesar árbol derecho Inorder : Procesar árbol izquierdo Procesar nodo Procesar árbol derecho Postorder : Procesar árbol izquierdo Procesar árbol derecho Procesar nodo void inorder (Arbol *nodo) { if (nodo != NULL) { inorder (nodo->izq); visitar(nodo) ; inorder (nodo->der); } } void postorder(Arbol *nodo) { if (nodo != NULL) { postorder(nodo->izq); postorder(nodo->der); visitar(nodo) ; } }
  • 12. Ejemplo de recorridos Preorden : A, B, D, E, C, F, G Inorden : D, B, E, A, F, C, G Postorden : D, E, B, F, G, C, A A B C F G D E
  • 13. Árbol binario de búsqueda Es una árbol: Una colección de nodos que puede ser vacía, o que en su defecto consiste de un nodo raíz R y un número finito de estructuras tipo árbol T 1 ,…, T k , llamados subárboles, los cuales son disjuntos y sus respectivos nodos raíz están conectados a R. Es binario: Cada nodo puede tener como máximo dos hijos , en otras palabras, cada nodo sólo puede tener dos subárboles. Es de búsqueda porqué: Los nodos están ordenados de manera conveniente para la búsqueda. Todas las datos del subárbol izquierdo son menores que el dato del nodo raíz, y todas los datos del subárbol derecho son mayores.
  • 14. Ejemplos ¿son todos árboles binarios de búsqueda? 6 2 8 3 1 4 6 2 8 3 1 4 7 2 7 1 8 6 5 4
  • 15. Operación BUSCAR boolean buscar(Arbol *nodo, int elem) { if (nodo == NULL) return FALSE; else if (nodo->dato < elem) return buscar(nodo->izq, elem); else if (nodo->dato > elem) return buscar(nodo->der, elem); else return TRUE; } 6 2 8 3 1 4 Buscando 4: VERDADERO Buscando 7: FALSO
  • 16. Operación INSERTAR void insertar(Arbol *nodo, int elem){ if (nodo == NULL) { nodo = (Arbol *) malloc(sizeof(Arbol)); nodo->dato = elem; nodo->izq = nodo->der = NULL; } else if (elem < nodo->dato) nodo-izq = insertar(nodo->izq, elem); else if (elem > nodo->dato) nodo->der = insertar(nodo->der, elem); return nodo ; } 6 2 8 3 1 4 5 Insertando 5
  • 17. Operación ELIMINAR (1) Existen cuatro distintos escenarios: Intentar eliminar un nodo que no existe. No se hace nada, simplemente se regresa FALSE. Eliminar un nodo hoja. Caso sencillo; se borra el nodo y se actualiza el apuntador del nodo padre a NULL. Eliminar un nodo con un solo hijo. Caso sencillo; el nodo padre del nodo a borrar se convierte en el padre del único nodo hijo. Eliminar un nodo con dos hijos. Caso complejo, es necesario mover más de un apuntador.
  • 18. ELIMINAR (casos sencillos) 6 2 8 3 1 4 Eliminar nodo hoja Eliminar 3 Eliminar nodo con un hijo Eliminar 4 6 2 8 3 1 4
  • 19. ELIMINAR (Caso complejo) 6 2 8 3 1 4 5 6 3 8 3 1 4 5 Eliminar nodo con dos hijos Eliminar 2 eliminar copiar valor Remplazar el dato del nodo que se desea eliminar con el dato del nodo más pequeño del subárbol derecho Después, eliminar el nodo más pequeño del subárbol derecho ( caso fácil )
  • 20. Otro ejemplo (caso complejo) 6 2 8 3 1 4 5 3.5 Eliminar nodo con dos hijos Eliminar 2 6 3 8 3 1 4 5 3.5
  • 21. Implementación ELIMINAR void eliminar(Arbol *nodo, int elem) { Arbol *aux, * hijo; if (nodo == NULL) return; /* no existe nodo */ /* recorrer árbol hasta encontrar elem */ else if (elem < nodo->dato) nodo-izq = eliminar(nodo->izq, elem); else if (elem > nodo->dato) nodo->der = eliminar(nodo->der, elem); else /* encontramos el elemento */ /* tiene dos hijos */ if (nodo->izq && nodo->derecho){ aux = enontrar_min (nodo->der); nodo->dato = aux->dato; nodo->der = eliminar( nodo->der; nodo->dato); } /* un solo hijo */ else { aux = nodo; if (nodo->izq == NULL) hijo = nodo->der ; if (nodo->der == NULL) hijo = nodo->izq ; free(aux) ; return hijo ; } } return nodo; }
  • 22. Árboles desbalanceados La figura muestra un árbol binario de búsqueda, sin embargo éste NO facilita la búsqueda de elementos. El problema es que está muy desbalanceado . La solución es balancearlo, y con ello asegurar que asegurar que tiempo promedio de búsqueda sea de O(log 2 N ). 2 7 1 8 6 5 4
  • 23. Árboles AVL Propuestos por A delson- V elskii and L andis. Árboles binarios con una condición de balance. Esta condición es usada para asegurar que en todo momento la altura del árbol es O(log 2 N ). Condición de balance : para cada nodo del árbol, las alturas de sus subárboles izquierdo y derecho sólo pueden diferir como máximo en 1. La condición de balance debe mantenerse después de cada operación de inserción o eliminación.
  • 24. ¿son árboles AVL? 0,0 1,0 0,0 1,2 3,2 1,0 0,0 5 6 2 8 3 1 4 6 2 8 3 1 4 7 0,0 1,1 0,0 1,2 3,1 0,0 0,0
  • 25. Construcción de un árbol AVL Cuando se inserta un nodo se modifican las condiciones de balance en la trayectoria hacia la raíz . Si se presenta una desbalance, entonces es necesario hacer algunas modificaciones al árbol . Dos tipos de modificaciones: Rotación simple Rotación doble 5 6 2 8 1 4 3,1
  • 26. Rotación simple X K 1 K 2 Y Z X K 1 K 2 Y Z Z K 1 K 2 Y X K 2 K 1 Y Z X
  • 27. Ejemplo rotación simple 4 2 5 6 1 3 2 1 4 3 6 5
  • 28. NO siempre es suficiente ¡tenemos un caso de “pata de perro”! 6 2 8 3 1 4 2 1 6 3 4 8
  • 29. Rotación doble K 1 K 3 D A K 2 B C K 1 K 3 A D K 2 B C K 1 K 3 D A K 2 B C K 3 K 1 D A K 2 B C
  • 30. Ejemplo doble rotación 2 6 1 3 5 4 14 7 15 k 3 k 1 k 2 13 2 7 1 3 6 4 14 5 15 13