La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Árboles clase 6 Apoyo de Práctica. Resumen ●Árboles ○Concepto ○Características ○Dinámica ○Recorridos o barridos. ●Ejercicio Sugerido.

Presentaciones similares


Presentación del tema: "Árboles clase 6 Apoyo de Práctica. Resumen ●Árboles ○Concepto ○Características ○Dinámica ○Recorridos o barridos. ●Ejercicio Sugerido."— Transcripción de la presentación:

1 Árboles clase 6 Apoyo de Práctica

2 Resumen ●Árboles ○Concepto ○Características ○Dinámica ○Recorridos o barridos. ●Ejercicio Sugerido

3 Estructuras Básica Autoreferenciada Tanto las listas, pilas como las colas son estructuras lineales que utilizan: struct nodoLista { char dato; // pueden ser más de un campo, u otro struct struct nodoLista * ptrSiguiente; }; typedef struct nodoLista NodoLista; typedef NodoLista * ptrNodoLista; Pero estas no son apropiadas para representar estructuras jerárquicas del tipo: ●Organigramas ●Un File System de un S.O→ Para esto se usan Árboles → ●etc

4 Arboles - Concepto Las estructuras de datos denominadas árboles de búsqueda binario, se construyen con el objetivo de lograr organizar la información de una manera conveniente, para facilitar su acceso posterior. Características ●Es una estructura no lineal de datos, de dos dimensiones. ●Cada nodo contiene enlaces (punteros) a dos o más nodos. ●El nodo raíz es el primer nodo del árbol del cual penden los demás nodos. ●Cada puntero de cada nodo apunta a dos nodos que constituyen ramas. Cada uno de estos almacena la dirección de otras estructuras o NULL. Nota: Si bien existen diferentes tipos de árboles, nos concentraremos en árboles binarios búsqueda.

5 Árboles Binario de Búsqueda - Dinámica En todo Árbol Binario de Búsqueda, los menores van a la izquierda del nodo, y los mayores a la derecha. Alta ●Se recorre el árbol, teniendo en cuenta si el valor a ingresar es mayor o menor que el nodo a ingresar. ●Por Ejemplo, para dar de alta el 9 y el 5. ? Baja ●Se busca el nodo, por ej 3. ●Se toma cada sub-arbol (1) y (6,4,7) y se los inserta a modo de árbol binario de búsqueda. ?

6 Recorrido PreOrden Algoritmo recursivo: Procesa el Nodo Recorre SubÁrbol Izquierdo Recorre SubÁrbol Derecho Resultado del Recorrido 47 - 25 - 11 - 7 - 17 - 43 - 31 - 44 - 77 - 65 - 68 - 93

7 Recorrido PreOrden Algoritmo: Procesa el Nodo Recorre SubArbol Izquierdo Recorre SubArbol Derecho A continuación: Simule el recorrido del siguiente árbol de estudio. Resultado del Recorrido ?

8 Recorrido InOrden Algoritmo recursivo: Recorre SubÁrbol Izquierdo Procesa el Nodo Recorre SubÁrbol Derecho Resultado del Recorrido 7 - 11 - 17 - 25 - 31 - 43 - 44 - 47 - 65 - 68 - 77 - 93 ¿Que observa en el conjunto de salida de este recorrido?

9 Recorrido InOrden Algoritmo: Recorre SubÁrbol Izquierdo Procesa el Nodo Recorre SubÁrbol Derecho A continuación: Simule el recorrido del siguiente árbol de estudio. Resultado del Recorrido ?

10 Recorrido PostOrden Algoritmo: Recorre SubÁrbol Izquierdo Recorre SubÁrbol Derecho Procesa el Nodo Resultado del Recorrido 7 - 17 - 11 - 31 - 44 - 43 - 25 - 68 - 65 - 93 - 77 - 47

11 Recorrido PostOrden Algoritmo: Recorre SubÁrbol Izquierdo Recorre SubÁrbol Derecho Procesa el Nodo A continuación: Simule el recorrido del siguiente árbol de estudio. Resultado del Recorrido ?

12 Resumen ●Árboles ●Ejercicio sugerido

13 Ejercicios Sugeridos 1)Ejercicio de Lista Ordenada - con extensión a Pila Dado el caso de estudio del ej 1 de teoría “Crear un árbol binario y lo recorrerlo en preorden, inorden, y en postOrden” Que usa la estructura y tipos siguientes: /* estructura autoreferenciada */ struct nodoArbol { struct nodoArbol *ptrIzq;/*link al subárbol izquierdo*/ int dato; /* valor del nodo */ struct nodoArbol *ptrDer; /*link al subárbol derecho*/ }; typedef struct nodoArbol NodoArbol;// sinónimo de la estructura nodoArbol typedef NodoArbol *ptrNodoArbol; // sinónimo de NodoArbol

14 Ejercicios Sugeridos - Estratégia Se pide: 1.Genere una función que reciba como parámetros la raíz y un valor de dato a buscar y devuelva si existe en el árbol o no. Se propone usar el sig prototipo. int buscaElemento( ptrNodoArbol ptrRaiz, int valor ); a.// donde esta función devuelve 1 si existe 0 caso contrario. Modifique la aplicación para que pruebe esta función luego de generar el árbol. 2.Genere una función que elimine un elemento determinado. Para facilitar esta tarea se propone usar el caso de estudio dado en teoría, utilice la siguiente función para generarlo. /* Genera nodos aleatorios en el árbol */ void generaNodosEjTeoria( ptrNodoArbol * pptrRaiz) { int i; int elementos[12] = {47,25,77,11,7,17,43,31,44,65, 68,93}; /* inserta valores al azar entre 1 y 15 en el árbol */ for ( i = 0; i < 12; i++ ) { printf( "agregando %5d\n", elementos[i] ); insertaNodo( pptrRaiz, elementos[i] ); }

15 Ejercicios Sugeridos - Estratégia Se propone utilice para este cometido utilizar el siguiente prototipo int eliminaNodo(ptrNodoArbol ptrRaiz,int valor);//1=Existe 0=contrario. 3. Genere una función que muestre el árbol recorriéndolo por niveles. Para facilitar esta tarea se propone utilice el caso de estudio dado en teoría. Se propone utilizar el siguiente pseudocodigo y además una estructura auxiliar cola. int recorrePorNiveles( ptrNodoArbol ptrRaiz ); Definimos la cola Q; //Estructura auxiliar Definimos un puntero aux //Puntero a la cola Encoalmos la raiz en Q; //Encolamos la raiz mientras(tenga elementos) hacer aux = sacar(Q); //sacamos un elemento de la cola Mostramos(aux); //realizamos operaciones sobre el nodo aux si (Der(aux) <> NULL) //preguntamos si aux tiene árbol derecho encolamos(Der(aux)); fin-Si si (Izq(aux) <> NULL) //preguntamos si aux tiene árbol izquierdo encolamos(Izq(aux)); fin-Si fin-Mientras

16 Ejercicios Sugeridos - Resultado Como resultado se pretende obtener Recorrido Por Niveles --------------------------- nivel 1: 47 nivel 2: 25 77 nivel 3: 11 43 65 93 nivel 4: 7 17 31 44 68 ---------------------------

17 Ejercicios Sugeridos - Más Consignas Se propone utilice para este cometido utilizar el siguiente prototipo int eliminaNodo(ptrNodoArbol ptrRaiz,int valor);//1=Existe 0=contrario. 4. Genere una función que obtenga la altura del árbol. int cantNodosArbol( ptrNodoArbol ptrRaiz ); Como resultado se pretende obtener Cantidad de Nodos de árbol raíz ( 47 ) = 12 5. Genere una función que obtenga la cantidad de elementos de un árbol. Se propone utilice para este cometido utilizar el siguiente prototipo int alturaArbol( ptrNodoArbol ptrRaiz ); //puede modificar recorrePorNivel para lograr esto? Como resultado se pretende obtener Altura de árbol raíz ( 47 ) = 4

18 Ejercicios Sugeridos - Objetivos Objetivos ● Comprender la estructura de los árboles. ● Comprender las búsquedas en árboles binarios. ● Comprender cómo se inserta y se da de baja un elemento. ● Comprender para que se usan.

19 Bibliografía


Descargar ppt "Árboles clase 6 Apoyo de Práctica. Resumen ●Árboles ○Concepto ○Características ○Dinámica ○Recorridos o barridos. ●Ejercicio Sugerido."

Presentaciones similares


Anuncios Google