SlideShare una empresa de Scribd logo
1 de 59
Descargar para leer sin conexión
Estructura de Datos
Tema 6. Árboles
Presenta: David Martínez Torres
Universidad Tecnológica de la Mixteca
Instituto de Computación
Oficina No. 37
dtorres@mixteco.utm.mx
Contenido
1. Definición y operaciones
2. Implementación de árboles binarios
3. Recorrido de árboles binarios
4. Implementación de árboles AVL
5. Árboles n-arios: La estructura TRIE
6. Referencias
1. Definición y operaciones

5 der
izq
3
 8 

4 

raiz
nodos
Sub árbol
izquierdo
hojas
Note la definición
recursiva
En estructura de datos, la forma más simple de un árbol, es un árbol
binario, que consiste de:
 Un nodo (llamado raiz) y
 sub-árboles Izquierdo y Derecho
Ambos sub-árboles son árboles binarios
1. Definición y operaciones
Posible tipo de dato para definir un árbol
binario.
typedef struct arbol{
int info; //datos
struct arbol *p; //apuntador al padre
struct arbol *izq; //apuntador al hijo izq.
struct arbol *der; //apuntador al hijo der.
}tipoArbol;
typedef tipoArbol * tipoArbolPtr;
1. Definición y operaciones
5
Los árboles binarios no necesariamente
deben tener sus dos hijos
1. Definición y operaciones
Árbol estrictamente binario
 Un nodo que no es hoja tiene subárboles que no son vacíos
 Un árbol estrictamente binario con n hojas tiene siempre 2n-1
nodos
1. Definición y operaciones
 Altura: Es el nivel de la hoja en el camino mas largo desde la raíz mas
1. Por definición, la altura de un árbol vacío es -1
 Grado: Es el número de hijos que tiene en ese momento el nodo
 Nivel de un nodo: es su distancia desde la raíz al nodo
 Orden: Número potencial de hijos que puede tener cada elemento de
un árbol.
Nivel 0
Nivel 1
Nivel 2
Nivel 3
1. Definición y operaciones
Profundidad=3
Nivel de F=2
Altura de A=4
Grado de C=2
Nivel 0
Nivel 1
Nivel 2
Nivel 3
La profundidad de un árbol binario es el máximo nivel de cualquier hoja
del árbol. Otros datos a calcular de un árbol son los siguientes:
1. Definición y operaciones
Estructuras que no son árboles
binarios
1. Definición y operaciones
1. Insertar elementos
2. Eliminar elementos
3. Buscar elementos
4. Recorrer el árbol
5. Modificar elementos
6. Mínimo
7. Máximo
8. Predecedor
9. Sucesor
10. Guardar datos al archivo
11. Leer datos del archivo
2. Implementación de árboles binarios
x
yx xz
Sea x un nodo en un árbol de búsqueda binaria. Si y
es un nodo del sub-árbol izquierdo de x, entonces la
clave de y  clave de x. Si z es un nodo del sub-árbol
derecho de x, entonces la clave de x  clave de z.
2. Implementación de árboles binarios
x
yx xz
A continuación se muestran dos árboles
de búsqueda binaria son:
typedef struct arbol{
int info; //datos
struct arbol *p; //apuntador al padre
struct arbol *izq; //apuntador al hijo izq.
struct arbol *der; //apuntador al hijo der.
}tipoArbol;
typedef tipoArbol * tipoArbolPtr;
void insertar(tipoArbolPtr *ra, int dato);
int main(){
tipoArbolPtr raiz=NULL;
insertar(&raiz,5);
insertar(&raiz,3);
insertar(&raiz,4);
}
2. Implementación de árboles binarios
Enseguida se presenta el
código necesario de la función
de inserción en un árbol
binario.
Realice las pruebas de
escritorio para insertar 5, 3, 4.
void insertar(tipoArbolPtr *ra, int dato){
tipoArbolPtr nuevo, ant, act;
nuevo=crearNodo(dato);
if(!nuevo)
printf(“No hay memoria”);
else {
if(*ra==NULL)
*ra=nuevo;
else {
ant=*ra;
act = *ra;
while (act != NULL && dato!=ant->info){
ant = act;
if ( dato < ant->info)
act = act->izq;
else
act= act->der;
}
if(dato == ant->info)
printf(“dato ya existe");
else {
if(dato<ant->info)
ant->izq=nuevo;
else
ant->der=nuevo;
nuevo->p=ant;
}
}
}
}
2. Implementación de árboles binarios
Eliminación en un árbol de búsqueda binaria
Casos para eliminar árboles binarios:
1. Que el elemento sea un nodo hoja.
2. Que el elemento sea un nodo sin hijo izquierdo
o derecho. En este caso, su único sub-árbol
sube para toma el lugar del nodo.
3. Que el elemento posea dos sub-árboles. La
eliminación puede ser por sucesor o
predecesor. Si es por sucesor, el sucesor no
posee hijo izquierdo, luego éste puede ser
movido desde su posición a la del elemento a
eliminar, pero el nodo que se liberará la
memoria será el sucesor.
Eliminación en un árbol de búsqueda
binaria: CASO 1. Nodo hoja.
15
5 16
3
12 20
18
10 23
6
7
z
15
5 16
3
12 20
13 18
10 23
6
7
Eliminación en un árbol de búsqueda binaria:
CASO 2. Nodo con un solo hijo
15
5
3
12
20
13
18
10
23
6
7
15
5 16
3
12 20
13 18
10 23
6
7
z
Eliminación en un árbol de búsqueda binaria:
CASO 3. Nodo con sus dos hijos (por sucesor)
15
6 16
3
12 20
13 18
10 23
7
15
5 16
3
12 20
13 18
10 23
7
z
6
15
5 16
3
12 20
13 18
10 23
6
7
z
7
15
5 16
3
12 20
13 18
10 23
6
z
Eliminar un elemento en un árbol de búsqueda binaria
 Algoritmo:
1. Verificar que el árbol no esté vacío
2. Introducir el elemento a eliminar
3. Buscar el elemento
4. Si se encontró, imprimir el árbol actual
indicando el elemento a eliminar.
5. llamar a la función eliminar, pasándole como
parámetros el apuntador de la raíz del árbol por
referencia y el apuntador del elemento
encontrado
6. La función eliminar debe considerar los tres
casos de eliminación
7. Al eliminarlo, liberar la memoria del elemento y
mostrar el árbol sin el elemento.
3. Recorrido de árboles binarios
 En orden
 En preorden
 En postorden
Ejemplo del recorrido en orden del árbol
 En orden (recursivo)
 Recorrer el árbol izquierdo en orden
 Visitar la raíz
 Recorrer el árbol derecho en orden
void enorden(tipoArbolPtr raiz){
if(raiz!=NULL){
enorden(raiz->izq);
printf("%3d",raiz->num);
enorden(raiz->der);
}
}
2 3 4 5 7 8
5
2 4
7
3
8
5
2 4
7
3
8
Ejemplo del recorrido en preorden del árbol
 En preorden
 Visitar la raíz
 Recorrer el árbol izquierdo en preorden
 Recorrer el árbol derecho en preorden
5
2 4
7
3
8
5
2 4
7
3
8 5 3 2 4 7 8
Ejemplo del recorrido en postorden del árbol
 En postorden
 Recorrer el árbol izquierdo en postorden
 Recorrer el árbol derecho en postorden
 Visitar la raíz
5
2 4
7
3
8
5
2 4
7
3
8 2 4 3 8 7 5
Modificar algún elemento
Prototipo de función
void modificar(tipoArbolPtr raiz,dato);
Algoritmo:
Buscar el elemento
Si se encontró el elemento
Pedir que campo modificar
Sino
Informar que no se encontró el elemento
Fin
4. Árboles balanceados
Es un árbol binario de búsqueda que tiene como objetivo
realizar reacomodos o balanceos después de inserciones o
eliminaciones de elementos: AVL, B, 2-3
Estos árboles fueron nombrados por
sus desarrolladores Adelson-Velskii
y Landis
4. Árboles balanceados AVL
typedef struct arbolAvl{
int info;
int fe; //factor de equilibrio
struct arbolAvl *izq; //apuntador al hijo izq.
struct arbolAvl *der; //apuntador al hijo der.
}tipoArbolAvl;
typedef tipoArbolAvl * tipoArbolAvlPtr;
Agrega la propiedad de altura para
balancear el árbol en caso necesario.
4. Árboles balanceados AVL
Propiedad:
Que la altura de los subárboles
de cada nodo difiere en no más
de 1. Esto es, la altura B=hd-hi:
-1<=B<=1
Para mantenerlo balanceado es necesario
saber la altura o la diferencia en alturas de
todos los subárboles.
Esto se logra con un campo “FE”(Factor de
Equilibrio) en cada nodo, como un contador
de la diferencia entre las alturas de sus
subárboles.
Principal característica:
excelente tiempo de ejecución
para las operaciones de
(búsqueda, altas y bajas)
Ejemplo, árbol balanceado AVL
Inserción en AVL
 La inserción se hace siguiendo el camino de búsqueda
 Puede aumentar la altura de una rama, por lo cual cambiará el factor de
equilibrio de dicho nodo.
 Implica que se retornará por el camino de búsqueda para actualizar el
FE de cada nodo
 Se puede llegar a desbalancear por tanto rebalancear.
 O puede mejorar. Si el arbol A se le inserta el 2, resultará en
perfectamente balanceado. Pero si se le inserta el 5 se desbalancea
 El proceso termina cuando se llega a la raíz o cuando termina el re-
balanceo del mismo
0
0
1
Árbol A
0 0 0
10
4 17
15 20
6
-1
0
2
Árbol A + Nodo 5
-1 0 0
10
4 17
15 20
6
5
Reestructuración AVL
 Hay 4 casos posibles a tener en cuenta, según donde se hizo la Inserción.
10
1. Inserción en el
Subárbol IZQ De la
Rama IZQ de 10
10
3. Inserción en el
Subárbol DER De la
Rama IZQ de 10
10
2. Inserción en el
Subárbol DER De la
Rama DER de 10
10
4. Inserción en el
Subárbol DER De la
Rama IZQ de 10
 Solución: La ROTACION le devuelve el equilibrio al árbol.
 Rotación Simple: Caso 1 y 2: Implica a 10 y su descendiente
 Rotación Doble: Caso 3 y 4: Implica a los 3 nodos
 Soluciones simétricas: En c/caso, las ramas están opuestas.
AVL: Rotación Simple
AVL: Rotación Simple
 Luego de Insertar el Nodo 2 el árbol quedó
desbalanceado.
 Según que rama ha crecido, la Rotación Simple
puede ser por la izquierda(II) o por la
derecha(DD).
 Movimientos de apuntadores (ptr’s).
 n es ptr al nodo problema.
 II (nuestro ej). n1 apunta a rama IZQ
n->izq=n1–>der
n1->der=n
n=n1
 DD. n1 apunta a rama DER
n->der=n1–>izq
n1->izq=n
n=n1
10
4
2
-2
-1
0
n
n1
10
4
2
0
0
0
n1 n
n
AVL: Rotación Doble
Movimientos de apuntadores (ptr’s).
 n apunta al nodo problema; n1 al hijo de n con
problemas, n2 al hijo de n1
 DI(nuestro ej). Derecha–izquierda
n1->izq=n2–>der
n2–>der=n1
n->der=n2–>izq
n2–>izq=n
n=n2
 ID: izquierda–derecha
n1->der=n2–>izq
n2–>izq=n1
n->izq=n2–>der
n2–>der=n
n=n2
La solución consiste
en subir el 40, pender
el 30 a su izquierda y
el 60 a su derecha.
30
60
40
n
n1
n2
2
-1
0
30 60
40
n1
n2
n
AVL: Rotación Doble
Ejemplo rotaciones simples a la
Izquierda II
5
4
1
10
3
2
Raiz
2
1
n
n1
a)
n->izq=n1–>der
n1->der=n
n=n1
5
4
1
10
3
2
Raiz
n
n1
c)
-
-
5
4
1
10
3
2
Raiz
1
2
3
n
n1
b)
-
-
-
Ejemplos de rotación simple a la derecha (DD)
n->der=n1–>izq
n1->izq=n
n=n1
5 12
9
10
3 15
Raiz
n
n1
b)
Ejemplo de rotación doble izquierda
derecha(ID) n1->der=n2–>izq
n2–>izq=n1
n->izq=n2–>der
n2–>der=n
n=n2
9
7
1 10
5
Raiz
8
6
n
n1
n2
b)
Ejemplo de rotación doble
derecha izquierda (DI)
n1->izq=n2–>der
n2–>der=n1
n->der=n2–>izq
n2–>izq=n
n=n2
10
7
3 12
5
Raiz
8
6
n
n2
n1
b)
Ejemplo: Crear el árbol AVL a partir de la inserción de
las siguientes claves: 65, 50, 23, 70, 82, 68 y 39
Ejemplo: Crear el arbol AVL a partir de la inserción de
las siguientes claves.
Ejemplo: Crear el árbol AVL a partir de la inserción de
las siguientes clave: 65, 50, 23, 70, 82, 68 y 39
Aquí falta código parecido al
utilizado en 1.1 actualizar FE
del hijo izquierdo.
Eliminación en AVL
 La operación de eliminación en árboles balanceados
consiste en quitar un nodo del árbol sin violar los
principios que definen a un árbol balanceado.
 Se distinguen los mismos casos que en árboles binarios:
 CASO 1. Si el elemento a borrar es hoja, simplemente se
suprime.
 CASO 2. Si el elemento a borrar tiene sólo un hijo, entonces
tiene que sustituirse por él.
 CASO 3. Si el elemento a borrar tiene los dos hijos,
entonces tiene que sustituirse por su sucesor o predecesor,
dependiendo de la opción que se elija.
… Eliminación en AVL
 Para eliminar un nodo en un árbol balanceado lo primero que
debe hacerse es localizar su posición en el árbol. Se elimina
siguiendo los criterios establecidos anteriormente y se regresa
por el camino de búsqueda, actualizando el FE de los nodos
visitados. Si en alguno de los nodos se viola el criterio de
equilibrio, entonces debe reestructurarse el árbol. El proceso
termina cuando se llega hasta la raíz del árbol.
Eliminación en AVL
En las siguientes diapositivas se presentan ejemplos de
la eliminación de nodos del siguiente árbol AVL. En
nodos con dos hijos, la eliminación se realizará
buscando el sucesor.
1. En el primer árbol, se
selecciona el sucesor
del nodo 40.
2. En el segundo árbol,
se ha eliminado el nodo
sucesor y se sustituyó el
valor 50 en el nodo 40.
3. Se identifica un
desbalanceo con
solución rotación
Derecha-Derecha.
1. Después del
balanceo, subiendo a la
raiz, se vuelve a
desbalancear el arbol,
ahora aplicar rotación
Izquierda-Izquierda
2. Después del
balanceo, en el nuevo
árbol se selecciona el
nodo 5 a eliminar.
1. En el primer árbol, se
eliminó el 5, pero se
desbalanceó con
rotación DI.
2. En segundo árbol
eliminar 20, con sucesor
30, no provoca
problema.
1. En el primer árbol, se
eliminará el 5, con
sucesor 35.
2. En segundo árbol se
desbalanceó y se
seleccionó rotación DI.
En la eliminación del 75
como nodo hoja, no
genera ningún
inconveniente.
Eliminación en AVL
Ejercicio. Del árbol que se muestra, realice paso a paso
la eliminación por antecesor de las siguientes claves:
40, 50, 35 y 30.
Eliminación en AVL
Ejercicio. Del árbol que se muestra, realice paso a paso
la eliminación por antecesor de la clave 20.
5. Árboles n-arios: La estructura TRIE
 Un trie es una estructura de árbol en la que:
 Cada nodo (excepto la raíz) está etiquetado con un
caracter (a, ..., z) o una marca de fin (símbolo $).
 Un camino de la raíz a una hoja (etiquetada con $)
corresponde a una palabra del diccionario.
 Cada nodo (excepto la raíz y las hojas) es un
prefijo del conjunto.
5. Árboles n-arios: La estructura TRIE
 Representación de diccionarios de palabras. Muchas
palabras implica mucha memoria y operaciones lentas
 Muchas palabras tienen prefijos comunes. P. ej.:
operador, operando; encontrado, -a, -os, -as...
 Implementaciones de Tries:
 Nodo-vector. cada nodo es un vector de apuntadores
para acceder a los subárboles directamente.
 Nodo-lista. cada nodo es una lista enlazada por
apuntadores que contiene las raíces de los subárboles.
5. Árboles n-arios: La estructura TRIE
Ejemplo de
representación
de un árbol
TRIE, con las
siguientes
palabras:
cris, cruz, javi,
juan, rafa,
raquel
5. Árboles n-arios: La estructura TRIE
 Nodo-vector [4]
5. Árboles n-arios: La estructura TRIE [5]
5. Árboles n-arios: La estructura TRIE
 Nodo-lista
5. Árboles n-arios: La estructura TRIE
 Aplicaciones de los árboles TRIE
 Diccionarios
 Soporta operaciones de búsqueda de palabras
 Comparaciones de subcadenas -> procesamiento de
textos, biología computacional, etc.
Referencias
1. Tenenbaum, Aaron & Langsam, Yedidyah & Augenstein,
Moshe “Estructuras de Datos en C”. Prentice-Hall, México
1997.
2. Deitel & Deitel “Como programar en C/C++”. Prentice-Hall,
México
3. Wirth, Niklaus “Algoritmos y estructura de Datos”. Prentice-
Hall, México.
4. Javier Campos . Técnicas Avanzadas de Programación
5. Estructuras de Datos y Algoritmos - Arboles digitales: Trie y
Patricia. Universidad Nacional de San Luis - 2015

Más contenido relacionado

Similar a Tema6-Arboles.pdf

Estructura de dato unidad 4
Estructura de dato unidad 4Estructura de dato unidad 4
Estructura de dato unidad 4
lenithoz
 
Arboles ppt
Arboles pptArboles ppt
Arboles ppt
INFOP
 
Arboles presentacion
Arboles presentacionArboles presentacion
Arboles presentacion
jenny
 
Arbol b ASIRB
Arbol b ASIRBArbol b ASIRB
Arbol b ASIRB
fjbarbaca
 

Similar a Tema6-Arboles.pdf (20)

Estructura de dato unidad 4
Estructura de dato unidad 4Estructura de dato unidad 4
Estructura de dato unidad 4
 
Arboles
ArbolesArboles
Arboles
 
Arboles ppt
Arboles pptArboles ppt
Arboles ppt
 
Arboles
Arboles Arboles
Arboles
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Arboles TDAS
Arboles TDASArboles TDAS
Arboles TDAS
 
Arboles presentacion
Arboles presentacionArboles presentacion
Arboles presentacion
 
Dylan_Medina_Arbol.pdf
Dylan_Medina_Arbol.pdfDylan_Medina_Arbol.pdf
Dylan_Medina_Arbol.pdf
 
Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binarios
 
Arboles
ArbolesArboles
Arboles
 
Unidad cuatro estructura de datos
Unidad cuatro estructura de datosUnidad cuatro estructura de datos
Unidad cuatro estructura de datos
 
binarySearchTree.ppt
binarySearchTree.pptbinarySearchTree.ppt
binarySearchTree.ppt
 
Arbol b ASIRB
Arbol b ASIRBArbol b ASIRB
Arbol b ASIRB
 
Arbol en programación ALAN MENDEZ.pdf
Arbol en programación ALAN MENDEZ.pdfArbol en programación ALAN MENDEZ.pdf
Arbol en programación ALAN MENDEZ.pdf
 
ARBOLES
ARBOLESARBOLES
ARBOLES
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
 
Estructuras no lineales de la unidad 4
Estructuras no lineales de la unidad 4Estructuras no lineales de la unidad 4
Estructuras no lineales de la unidad 4
 
DECLARACION DE ARBOLES.pdf
DECLARACION DE ARBOLES.pdfDECLARACION DE ARBOLES.pdf
DECLARACION DE ARBOLES.pdf
 

Más de CARLOSHUMBERTOMOTTAM

Más de CARLOSHUMBERTOMOTTAM (18)

paradigmasdelaia-151012153620-lva1-app6892.pdf
paradigmasdelaia-151012153620-lva1-app6892.pdfparadigmasdelaia-151012153620-lva1-app6892.pdf
paradigmasdelaia-151012153620-lva1-app6892.pdf
 
pasoapasodelmetodocientifico-161003170442.pdf
pasoapasodelmetodocientifico-161003170442.pdfpasoapasodelmetodocientifico-161003170442.pdf
pasoapasodelmetodocientifico-161003170442.pdf
 
416 Met Inv Clase 5.pptx
416 Met Inv Clase 5.pptx416 Met Inv Clase 5.pptx
416 Met Inv Clase 5.pptx
 
416 Met Inv Clase 4.pptx
416 Met Inv Clase 4.pptx416 Met Inv Clase 4.pptx
416 Met Inv Clase 4.pptx
 
los-tres-paradigmas-en-investigacin1693.pdf
los-tres-paradigmas-en-investigacin1693.pdflos-tres-paradigmas-en-investigacin1693.pdf
los-tres-paradigmas-en-investigacin1693.pdf
 
Plantilla del Proyecto final.pptx
Plantilla del Proyecto final.pptxPlantilla del Proyecto final.pptx
Plantilla del Proyecto final.pptx
 
416 Met Inv Clase 2.pptx
416 Met Inv Clase 2.pptx416 Met Inv Clase 2.pptx
416 Met Inv Clase 2.pptx
 
416 Met Inv Clase 1.pptx
416 Met Inv Clase 1.pptx416 Met Inv Clase 1.pptx
416 Met Inv Clase 1.pptx
 
metodologiayprocesodelainvestigacioncientifica1-150520153954-lva1-app6892.pdf
metodologiayprocesodelainvestigacioncientifica1-150520153954-lva1-app6892.pdfmetodologiayprocesodelainvestigacioncientifica1-150520153954-lva1-app6892.pdf
metodologiayprocesodelainvestigacioncientifica1-150520153954-lva1-app6892.pdf
 
epistemologiatema-iv-160916150808.pdf
epistemologiatema-iv-160916150808.pdfepistemologiatema-iv-160916150808.pdf
epistemologiatema-iv-160916150808.pdf
 
Unidad5.pdf
Unidad5.pdfUnidad5.pdf
Unidad5.pdf
 
Tabla Covid19 I.pdf
Tabla Covid19 I.pdfTabla Covid19 I.pdf
Tabla Covid19 I.pdf
 
RUP.pdf
RUP.pdfRUP.pdf
RUP.pdf
 
metricas.pdf
metricas.pdfmetricas.pdf
metricas.pdf
 
tema4.pdf
tema4.pdftema4.pdf
tema4.pdf
 
INGENIERIA DE SOFTWARE (SCRUM).pptx
INGENIERIA DE SOFTWARE (SCRUM).pptxINGENIERIA DE SOFTWARE (SCRUM).pptx
INGENIERIA DE SOFTWARE (SCRUM).pptx
 
CS_07_Estandares_para_pruebas_software.pdf
CS_07_Estandares_para_pruebas_software.pdfCS_07_Estandares_para_pruebas_software.pdf
CS_07_Estandares_para_pruebas_software.pdf
 
Diseño y desarrollo de software.pdf
Diseño y desarrollo de software.pdfDiseño y desarrollo de software.pdf
Diseño y desarrollo de software.pdf
 

Último

ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
gustavoiashalom
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
EdwinC23
 

Último (20)

Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJODIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTOPRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cereales
 
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdfAnálisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
Presentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónPresentacion de la ganaderia en la región
Presentacion de la ganaderia en la región
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdf
 

Tema6-Arboles.pdf

  • 1. Estructura de Datos Tema 6. Árboles Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx
  • 2. Contenido 1. Definición y operaciones 2. Implementación de árboles binarios 3. Recorrido de árboles binarios 4. Implementación de árboles AVL 5. Árboles n-arios: La estructura TRIE 6. Referencias
  • 3. 1. Definición y operaciones 5 der izq 3 8 4 raiz nodos Sub árbol izquierdo hojas Note la definición recursiva En estructura de datos, la forma más simple de un árbol, es un árbol binario, que consiste de:  Un nodo (llamado raiz) y  sub-árboles Izquierdo y Derecho Ambos sub-árboles son árboles binarios
  • 4. 1. Definición y operaciones Posible tipo de dato para definir un árbol binario. typedef struct arbol{ int info; //datos struct arbol *p; //apuntador al padre struct arbol *izq; //apuntador al hijo izq. struct arbol *der; //apuntador al hijo der. }tipoArbol; typedef tipoArbol * tipoArbolPtr;
  • 5. 1. Definición y operaciones 5 Los árboles binarios no necesariamente deben tener sus dos hijos
  • 6. 1. Definición y operaciones Árbol estrictamente binario  Un nodo que no es hoja tiene subárboles que no son vacíos  Un árbol estrictamente binario con n hojas tiene siempre 2n-1 nodos
  • 7. 1. Definición y operaciones  Altura: Es el nivel de la hoja en el camino mas largo desde la raíz mas 1. Por definición, la altura de un árbol vacío es -1  Grado: Es el número de hijos que tiene en ese momento el nodo  Nivel de un nodo: es su distancia desde la raíz al nodo  Orden: Número potencial de hijos que puede tener cada elemento de un árbol. Nivel 0 Nivel 1 Nivel 2 Nivel 3
  • 8. 1. Definición y operaciones Profundidad=3 Nivel de F=2 Altura de A=4 Grado de C=2 Nivel 0 Nivel 1 Nivel 2 Nivel 3 La profundidad de un árbol binario es el máximo nivel de cualquier hoja del árbol. Otros datos a calcular de un árbol son los siguientes:
  • 9. 1. Definición y operaciones Estructuras que no son árboles binarios
  • 10. 1. Definición y operaciones 1. Insertar elementos 2. Eliminar elementos 3. Buscar elementos 4. Recorrer el árbol 5. Modificar elementos 6. Mínimo 7. Máximo 8. Predecedor 9. Sucesor 10. Guardar datos al archivo 11. Leer datos del archivo
  • 11. 2. Implementación de árboles binarios x yx xz Sea x un nodo en un árbol de búsqueda binaria. Si y es un nodo del sub-árbol izquierdo de x, entonces la clave de y  clave de x. Si z es un nodo del sub-árbol derecho de x, entonces la clave de x  clave de z.
  • 12. 2. Implementación de árboles binarios x yx xz A continuación se muestran dos árboles de búsqueda binaria son:
  • 13. typedef struct arbol{ int info; //datos struct arbol *p; //apuntador al padre struct arbol *izq; //apuntador al hijo izq. struct arbol *der; //apuntador al hijo der. }tipoArbol; typedef tipoArbol * tipoArbolPtr; void insertar(tipoArbolPtr *ra, int dato); int main(){ tipoArbolPtr raiz=NULL; insertar(&raiz,5); insertar(&raiz,3); insertar(&raiz,4); } 2. Implementación de árboles binarios Enseguida se presenta el código necesario de la función de inserción en un árbol binario. Realice las pruebas de escritorio para insertar 5, 3, 4.
  • 14. void insertar(tipoArbolPtr *ra, int dato){ tipoArbolPtr nuevo, ant, act; nuevo=crearNodo(dato); if(!nuevo) printf(“No hay memoria”); else { if(*ra==NULL) *ra=nuevo; else { ant=*ra; act = *ra; while (act != NULL && dato!=ant->info){ ant = act; if ( dato < ant->info) act = act->izq; else act= act->der; } if(dato == ant->info) printf(“dato ya existe"); else { if(dato<ant->info) ant->izq=nuevo; else ant->der=nuevo; nuevo->p=ant; } } } } 2. Implementación de árboles binarios
  • 15. Eliminación en un árbol de búsqueda binaria Casos para eliminar árboles binarios: 1. Que el elemento sea un nodo hoja. 2. Que el elemento sea un nodo sin hijo izquierdo o derecho. En este caso, su único sub-árbol sube para toma el lugar del nodo. 3. Que el elemento posea dos sub-árboles. La eliminación puede ser por sucesor o predecesor. Si es por sucesor, el sucesor no posee hijo izquierdo, luego éste puede ser movido desde su posición a la del elemento a eliminar, pero el nodo que se liberará la memoria será el sucesor.
  • 16. Eliminación en un árbol de búsqueda binaria: CASO 1. Nodo hoja. 15 5 16 3 12 20 18 10 23 6 7 z 15 5 16 3 12 20 13 18 10 23 6 7
  • 17. Eliminación en un árbol de búsqueda binaria: CASO 2. Nodo con un solo hijo 15 5 3 12 20 13 18 10 23 6 7 15 5 16 3 12 20 13 18 10 23 6 7 z
  • 18. Eliminación en un árbol de búsqueda binaria: CASO 3. Nodo con sus dos hijos (por sucesor) 15 6 16 3 12 20 13 18 10 23 7 15 5 16 3 12 20 13 18 10 23 7 z 6 15 5 16 3 12 20 13 18 10 23 6 7 z 7 15 5 16 3 12 20 13 18 10 23 6 z
  • 19. Eliminar un elemento en un árbol de búsqueda binaria  Algoritmo: 1. Verificar que el árbol no esté vacío 2. Introducir el elemento a eliminar 3. Buscar el elemento 4. Si se encontró, imprimir el árbol actual indicando el elemento a eliminar. 5. llamar a la función eliminar, pasándole como parámetros el apuntador de la raíz del árbol por referencia y el apuntador del elemento encontrado 6. La función eliminar debe considerar los tres casos de eliminación 7. Al eliminarlo, liberar la memoria del elemento y mostrar el árbol sin el elemento.
  • 20. 3. Recorrido de árboles binarios  En orden  En preorden  En postorden
  • 21. Ejemplo del recorrido en orden del árbol  En orden (recursivo)  Recorrer el árbol izquierdo en orden  Visitar la raíz  Recorrer el árbol derecho en orden void enorden(tipoArbolPtr raiz){ if(raiz!=NULL){ enorden(raiz->izq); printf("%3d",raiz->num); enorden(raiz->der); } } 2 3 4 5 7 8 5 2 4 7 3 8 5 2 4 7 3 8
  • 22. Ejemplo del recorrido en preorden del árbol  En preorden  Visitar la raíz  Recorrer el árbol izquierdo en preorden  Recorrer el árbol derecho en preorden 5 2 4 7 3 8 5 2 4 7 3 8 5 3 2 4 7 8
  • 23. Ejemplo del recorrido en postorden del árbol  En postorden  Recorrer el árbol izquierdo en postorden  Recorrer el árbol derecho en postorden  Visitar la raíz 5 2 4 7 3 8 5 2 4 7 3 8 2 4 3 8 7 5
  • 24. Modificar algún elemento Prototipo de función void modificar(tipoArbolPtr raiz,dato); Algoritmo: Buscar el elemento Si se encontró el elemento Pedir que campo modificar Sino Informar que no se encontró el elemento Fin
  • 25. 4. Árboles balanceados Es un árbol binario de búsqueda que tiene como objetivo realizar reacomodos o balanceos después de inserciones o eliminaciones de elementos: AVL, B, 2-3 Estos árboles fueron nombrados por sus desarrolladores Adelson-Velskii y Landis
  • 26. 4. Árboles balanceados AVL typedef struct arbolAvl{ int info; int fe; //factor de equilibrio struct arbolAvl *izq; //apuntador al hijo izq. struct arbolAvl *der; //apuntador al hijo der. }tipoArbolAvl; typedef tipoArbolAvl * tipoArbolAvlPtr; Agrega la propiedad de altura para balancear el árbol en caso necesario.
  • 27. 4. Árboles balanceados AVL Propiedad: Que la altura de los subárboles de cada nodo difiere en no más de 1. Esto es, la altura B=hd-hi: -1<=B<=1 Para mantenerlo balanceado es necesario saber la altura o la diferencia en alturas de todos los subárboles. Esto se logra con un campo “FE”(Factor de Equilibrio) en cada nodo, como un contador de la diferencia entre las alturas de sus subárboles. Principal característica: excelente tiempo de ejecución para las operaciones de (búsqueda, altas y bajas)
  • 29. Inserción en AVL  La inserción se hace siguiendo el camino de búsqueda  Puede aumentar la altura de una rama, por lo cual cambiará el factor de equilibrio de dicho nodo.  Implica que se retornará por el camino de búsqueda para actualizar el FE de cada nodo  Se puede llegar a desbalancear por tanto rebalancear.  O puede mejorar. Si el arbol A se le inserta el 2, resultará en perfectamente balanceado. Pero si se le inserta el 5 se desbalancea  El proceso termina cuando se llega a la raíz o cuando termina el re- balanceo del mismo 0 0 1 Árbol A 0 0 0 10 4 17 15 20 6 -1 0 2 Árbol A + Nodo 5 -1 0 0 10 4 17 15 20 6 5
  • 30. Reestructuración AVL  Hay 4 casos posibles a tener en cuenta, según donde se hizo la Inserción. 10 1. Inserción en el Subárbol IZQ De la Rama IZQ de 10 10 3. Inserción en el Subárbol DER De la Rama IZQ de 10 10 2. Inserción en el Subárbol DER De la Rama DER de 10 10 4. Inserción en el Subárbol DER De la Rama IZQ de 10  Solución: La ROTACION le devuelve el equilibrio al árbol.  Rotación Simple: Caso 1 y 2: Implica a 10 y su descendiente  Rotación Doble: Caso 3 y 4: Implica a los 3 nodos  Soluciones simétricas: En c/caso, las ramas están opuestas.
  • 32. AVL: Rotación Simple  Luego de Insertar el Nodo 2 el árbol quedó desbalanceado.  Según que rama ha crecido, la Rotación Simple puede ser por la izquierda(II) o por la derecha(DD).  Movimientos de apuntadores (ptr’s).  n es ptr al nodo problema.  II (nuestro ej). n1 apunta a rama IZQ n->izq=n1–>der n1->der=n n=n1  DD. n1 apunta a rama DER n->der=n1–>izq n1->izq=n n=n1 10 4 2 -2 -1 0 n n1 10 4 2 0 0 0 n1 n n
  • 34. Movimientos de apuntadores (ptr’s).  n apunta al nodo problema; n1 al hijo de n con problemas, n2 al hijo de n1  DI(nuestro ej). Derecha–izquierda n1->izq=n2–>der n2–>der=n1 n->der=n2–>izq n2–>izq=n n=n2  ID: izquierda–derecha n1->der=n2–>izq n2–>izq=n1 n->izq=n2–>der n2–>der=n n=n2 La solución consiste en subir el 40, pender el 30 a su izquierda y el 60 a su derecha. 30 60 40 n n1 n2 2 -1 0 30 60 40 n1 n2 n AVL: Rotación Doble
  • 35. Ejemplo rotaciones simples a la Izquierda II 5 4 1 10 3 2 Raiz 2 1 n n1 a) n->izq=n1–>der n1->der=n n=n1 5 4 1 10 3 2 Raiz n n1 c) - - 5 4 1 10 3 2 Raiz 1 2 3 n n1 b) - - -
  • 36. Ejemplos de rotación simple a la derecha (DD) n->der=n1–>izq n1->izq=n n=n1 5 12 9 10 3 15 Raiz n n1 b)
  • 37. Ejemplo de rotación doble izquierda derecha(ID) n1->der=n2–>izq n2–>izq=n1 n->izq=n2–>der n2–>der=n n=n2 9 7 1 10 5 Raiz 8 6 n n1 n2 b)
  • 38. Ejemplo de rotación doble derecha izquierda (DI) n1->izq=n2–>der n2–>der=n1 n->der=n2–>izq n2–>izq=n n=n2 10 7 3 12 5 Raiz 8 6 n n2 n1 b)
  • 39. Ejemplo: Crear el árbol AVL a partir de la inserción de las siguientes claves: 65, 50, 23, 70, 82, 68 y 39
  • 40. Ejemplo: Crear el arbol AVL a partir de la inserción de las siguientes claves.
  • 41. Ejemplo: Crear el árbol AVL a partir de la inserción de las siguientes clave: 65, 50, 23, 70, 82, 68 y 39
  • 42.
  • 43.
  • 44. Aquí falta código parecido al utilizado en 1.1 actualizar FE del hijo izquierdo.
  • 45. Eliminación en AVL  La operación de eliminación en árboles balanceados consiste en quitar un nodo del árbol sin violar los principios que definen a un árbol balanceado.  Se distinguen los mismos casos que en árboles binarios:  CASO 1. Si el elemento a borrar es hoja, simplemente se suprime.  CASO 2. Si el elemento a borrar tiene sólo un hijo, entonces tiene que sustituirse por él.  CASO 3. Si el elemento a borrar tiene los dos hijos, entonces tiene que sustituirse por su sucesor o predecesor, dependiendo de la opción que se elija.
  • 46. … Eliminación en AVL  Para eliminar un nodo en un árbol balanceado lo primero que debe hacerse es localizar su posición en el árbol. Se elimina siguiendo los criterios establecidos anteriormente y se regresa por el camino de búsqueda, actualizando el FE de los nodos visitados. Si en alguno de los nodos se viola el criterio de equilibrio, entonces debe reestructurarse el árbol. El proceso termina cuando se llega hasta la raíz del árbol.
  • 47. Eliminación en AVL En las siguientes diapositivas se presentan ejemplos de la eliminación de nodos del siguiente árbol AVL. En nodos con dos hijos, la eliminación se realizará buscando el sucesor.
  • 48. 1. En el primer árbol, se selecciona el sucesor del nodo 40. 2. En el segundo árbol, se ha eliminado el nodo sucesor y se sustituyó el valor 50 en el nodo 40. 3. Se identifica un desbalanceo con solución rotación Derecha-Derecha. 1. Después del balanceo, subiendo a la raiz, se vuelve a desbalancear el arbol, ahora aplicar rotación Izquierda-Izquierda 2. Después del balanceo, en el nuevo árbol se selecciona el nodo 5 a eliminar.
  • 49. 1. En el primer árbol, se eliminó el 5, pero se desbalanceó con rotación DI. 2. En segundo árbol eliminar 20, con sucesor 30, no provoca problema. 1. En el primer árbol, se eliminará el 5, con sucesor 35. 2. En segundo árbol se desbalanceó y se seleccionó rotación DI. En la eliminación del 75 como nodo hoja, no genera ningún inconveniente.
  • 50. Eliminación en AVL Ejercicio. Del árbol que se muestra, realice paso a paso la eliminación por antecesor de las siguientes claves: 40, 50, 35 y 30.
  • 51. Eliminación en AVL Ejercicio. Del árbol que se muestra, realice paso a paso la eliminación por antecesor de la clave 20.
  • 52. 5. Árboles n-arios: La estructura TRIE  Un trie es una estructura de árbol en la que:  Cada nodo (excepto la raíz) está etiquetado con un caracter (a, ..., z) o una marca de fin (símbolo $).  Un camino de la raíz a una hoja (etiquetada con $) corresponde a una palabra del diccionario.  Cada nodo (excepto la raíz y las hojas) es un prefijo del conjunto.
  • 53. 5. Árboles n-arios: La estructura TRIE  Representación de diccionarios de palabras. Muchas palabras implica mucha memoria y operaciones lentas  Muchas palabras tienen prefijos comunes. P. ej.: operador, operando; encontrado, -a, -os, -as...  Implementaciones de Tries:  Nodo-vector. cada nodo es un vector de apuntadores para acceder a los subárboles directamente.  Nodo-lista. cada nodo es una lista enlazada por apuntadores que contiene las raíces de los subárboles.
  • 54. 5. Árboles n-arios: La estructura TRIE Ejemplo de representación de un árbol TRIE, con las siguientes palabras: cris, cruz, javi, juan, rafa, raquel
  • 55. 5. Árboles n-arios: La estructura TRIE  Nodo-vector [4]
  • 56. 5. Árboles n-arios: La estructura TRIE [5]
  • 57. 5. Árboles n-arios: La estructura TRIE  Nodo-lista
  • 58. 5. Árboles n-arios: La estructura TRIE  Aplicaciones de los árboles TRIE  Diccionarios  Soporta operaciones de búsqueda de palabras  Comparaciones de subcadenas -> procesamiento de textos, biología computacional, etc.
  • 59. Referencias 1. Tenenbaum, Aaron & Langsam, Yedidyah & Augenstein, Moshe “Estructuras de Datos en C”. Prentice-Hall, México 1997. 2. Deitel & Deitel “Como programar en C/C++”. Prentice-Hall, México 3. Wirth, Niklaus “Algoritmos y estructura de Datos”. Prentice- Hall, México. 4. Javier Campos . Técnicas Avanzadas de Programación 5. Estructuras de Datos y Algoritmos - Arboles digitales: Trie y Patricia. Universidad Nacional de San Luis - 2015