Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

Documentos relacionados
ESTRUCTURAS DE DATOS Y ALGORITMOS

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Segundo parcial de Programación 2

Programación Estructuras Arborescentes

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Estructura de Datos Tema 6. Árboles. Contenido 14/06/2018

Instituto de Computación - Facultad de Ingeniería - Universidad de la República

Segundo Parcial de Programación 2 7 de junio de 2017

Tema 09: TAD Árbol binario

Programación TADs Arboles

Examen de Programación 2 Diciembre de 2012

Solución práctico 6 Tipos Abstractos de Datos Lista, Pila y Cola

Estructura de datos y de la información Boletín de problemas - Tema 10

Para la resolución de los ejercicios, se dispone de una implementación de árbol binario a través de la clase BinTree con la siguiente especificación.

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios

Árboles Binarios Ordenados Árboles AVL

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

Programación II Arboles Binarios(AB)

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Estructura de Datos. Temario Unidad VI. Árboles Árboles AVL

Estructura de Datos Unidad 6: ARBOLES

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

Introducción a Árboles Árboles Binarios

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Algoritmos y Programación II Curso 2006

Laboratorio de Estructuras de Datos II

Diseño de Conjuntos y Diccionarios

Árbol ABB equilibrado. Lección: Árboles. Algorítmica II (Tema 4) Lenguajes y Sistemas Informáticos, Universidad Pablo de Olavide 1/ 58

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

Estructuras de Datos Dinámicas: Listas

Tema 6: Estructuras de datos recursivas

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Francisco J. Hernández López

Estructuras de Datos II

FUNDAMENTOS DE PROGRAMACIÓN Datos recursivos II

Arboles Binarios de Búsqueda en C++

95.12 Algoritmos y Programación II Práctica 7: árboles

Definición: NODO Un nodo es un punto de intersección o unión de varios elementos que confluyen en el mismo lugar.

Estructuras de Datos Clase 20 Árboles de búsqueda

PRÁCTICA No. 9 RECORRIDOS EN ÁRBOLES BINARIOS

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Programación II Árboles binarios de búsqueda (ABB)

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Colas deprioridad y heaps

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

Árboles AVL. Lección 14

Programación Introducción al Diseño de Tipos Abstractos de Datos

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Tema 10: Árbol binario de búsqueda

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

Estructura de Datos. Índice

Introducción: una simple colección

Introducción a los árboles. Lección 11

Estructuras de Datos ARBOLES Y GRAFOS

Árboles Binarios de Búsqueda. Lección 13

INGENIERIA DE SISTEMAS 19 ESTRUCTURAS DE DATOS (Listas simples) ARBOLES

12/08/2017 AVL. Especificación sobre árboles AVL. AVL: rotaciones

El TAD Árbol. El TAD Árbol

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

Estructuras de datos utilizando JAVA

El método main de la clase PruebaArbol, empieza creando una instancia de un objeto Árbol vacío y asigna su referencia a la variable árbol

Eliminación en un ABB

Árboles binarios. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Francisco J. Hernández López

Definición recursiva de los árboles

Árboles balanceados (AVL) Estructura de datos

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Árboles balanceados. Alonso Ramírez Manzanares Computación y Algoritmos Thursday, April 30, 15

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n).

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Auxiliar 1 - CC31A Programación de software sistema

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Estructura de Datos Árboles Árboles 2-3

EDA. Tema 8 Colas de Prioridad: Heaps

Árboles de Partición Quadtrees Octrees K-d trees

Árboles Binarios Ordenados Árboles AVL

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

Versión Iterativa de recuperar en un. Ejercicios Tema 11. Implementa una versión del método recuperar iterativa con la siguiente especificación:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Práctica 2 - Manejo de estructuras de datos y punteros

Tema 10. Árboles. José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía

Estructuras de datos Listas y árboles

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Árboles n-arios de búsqueda. Lección 16

Algoritmos y Estructuras de Datos. Guillermo Román Díez

1. Cuál es el número total máximo de nodos que tiene un árbol binario de N niveles? a. N 2-1 b. 2 N+1-1 c. 2 N d. 2 N+1 i.

Estructuras de datos Solemne 2

Programación de sistemas Árboles

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB)

Transcripción:

Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario Objetivos Trabajar con los tipos abstractos de datos Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario. Desarrollar y analizar implementaciones para estos TADs. Implementaciones Avanzadas. Primera parte: Especificaciones de Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario. Ejercicio Desarrollar una especificación funcional (sólo funciones, no procedimientos) para el TAD Árbol Binario de Búsqueda (Binary Search Tree BST) de caracteres, la cual contenga un conjunto mínimo de constructores, selectores, predicados y destructores para: Crear un BST vacío. Insertar un caracter en un BST. Determinar si un BST es vacío. Obtener el elemento que está en la raíz. Obtener subárbol izquierdo. Obtener subárbol derecho. Ejercicio 2 Las funciones de la Figura presentadas en el Práctico 4, forman una especificación para el TAD Árbol Finitario (Finitary Tree FT) de naturales (ver Figura ). Los Árboles n-arios son un caso particular de los finitarios, donde cada nodo del árbol tiene n hijos. Qué diferencias hay entre la especificación de Árboles Finitarios y n-arios?

Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario FTree nullftree (); 2 /* Devuelve el á rbol vac ío */ 3 4 FTree consftree ( unsigned int x, ListFTree l ); 5 /* Crea un á rbol no vac ío a partir de un natural y una lista de hijos ( sub á rboles ) */ 6 7 bool IsEmptyFTree ( FTree t ); 8 /* Determina si un á rbol dado es o no vac ío */ 0 unsigned int rootftree ( FTree t ); /* Devuelve el valor en la raíz de un á rbol no vac ío */ 2 3 ListFTree offspringftree ( FTree t ); 4 /* Devuelve la lista de hijos ( sub á rboles ) de la raíz de un á rbol no vac ío */ Figura : Especificación del TAD Árbol Finitario (Finitary Tree FT) de naturales. Segunda parte: Implementaciones de Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario. Ejercicio 3 Desarrollar una implementación completa del TAD Árbol Binario de Búsqueda del Ejercicio. Ejercicio 4 Desarrollar una implementación completa del TAD Árbol Finitario de naturales del Ejercicio 2, utilizando la representación de primer hijo - siguiente hermano. Ejercicio 5 Desarrollar una implementación completa del TAD Árbol n-ario de naturales del Ejercicio 2, que tome provecho de que todos los nodos del árbol tienen n hijos. Qué representación considera adecuada para representar los hijos? Tercera parte: Implementaciones Avanzadas Ejercicio 6 (Segundo Parcial 200) Suponga que se define una variante de árboles binarios de búsqueda (BST) balanceados según la cantidad de nodos de los subárboles. Se considera que un BST está balanceado si para cada nodo se cumple que la diferencia de la cantidad de nodos de sus subárboles (izquierdo y derecho) difiere en a lo sumo una unidad. Considere la declaración del tipo de los árboles binarios de búsqueda de enteros que se presenta en la Figura 2a, donde cada nodo de un árbol de tipo BST guarda en el campo CN la cantidad de nodos del árbol cuya raíz es dicho nodo. Recordar que la cantidad de nodos de un árbol vacío es 0, por definición. La Figura 2b presenta un ejemplo gráfico. Cada nodo se representa por un par de valores donde la primer componente es el valor de dato y el segundo el de CN para dicho nodo. representa el árbol vacío. Instituto de Computación - Facultad de Ingeniería - UdelaR Página 2 de 5

Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario (0,8) struct BSNode { 2 int dato ; 3 unsigned int CN ; 4 BSNode * izq, * der ; 5 }; 6 typedef BSNode * BST ; (a) Definición de tipo para el TAD BST balanceado (5,3) (25,4) (3,) (8,) (5,2) (30,) (20,) (b) Ejemplo Figura 2: BST balanceado. 6 Implementar una función recursiva insertar que, dados un árbol binario de búsqueda de enteros A de tipo BST, y un entero x, inserte a x en A y retorne TRUE, si y sólo si, luego de la inserción cada nodo cumple la condición de balanceo previamente definida. Tenga en cuenta las siguientes consideraciones: Si x ya estaba en A, la función no deberá modificar el árbol y el resultado será TRUE. La función insertar debe dejar el campo CN de cada nodo consistente con su definición, asumiendo que en el árbol parámetro se cumple que para cada nodo el campo CN contiene la cantidad de nodos del árbol cuya raíz es dicho nodo y además, que cada nodo (del árbol parámetro) cumple la condición de balanceo referida. La función insertar debe recorrer un sólo camino del árbol parámetro. No se permite usar funciones o procedimientos auxiliares en este ejercicio, salvo las funciones que se presentan en la Figura 3, las cuales se consideran predefinidas. Cabe aclarar que no se pide balancear el árbol, sino simplemente insertar según el criterio de los árboles binarios de búsqueda, actualizar los campos CN, que correspondan, y retornar un booleano que indique si luego de la inserción se cumple la condición de balanceo definida, asumiendo que ésta originalmente se verificaba en cada nodo del árbol parámetro. La firma de la función insertar es la siguiente: bool insertar ( BST &A, int x ); unsigned int abs ( int x ); 2 /* Retorna el valor absoluto de x */ 3 4 unsigned int cantnodos ( BST A ); 5 /* Retorna 0 si A es el á rbol vac ío y el valor del campo CN de la raíz de A en otro 6 caso */ Figura 3: Funciones auxiliares para el Ejericio 6. Ejercicio 7 (Segundo Parcial 20) Considere una agenda de teléfonos implementada como un árbol general de caracteres (de 0 a ), donde la raíz no tiene información y cada nodo representa a un dígito de números telefónicos. Las listas de hermanos están ordenadas de forma lexicográfica. El camino de la raíz a una hoja determina un número telefónico de la agenda, guardándose en cada hoja el nombre del contacto asociado a ese número. Por ejemplo, el árbol de la figura Fig.4 contiene los contactos: 04 bombero, 05 ambulancia, 0 patrullero, 6 hora y emergencia. Instituto de Computación - Facultad de Ingeniería - UdelaR Página 3 de 5

Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario () 0 6 hora emergencia 4 bombero 5 ambulancia patrullero Figura 4: Ejemplo de agenda. Se pide: Definir la representación en C* del tipo Agenda, árbol general de caracteres implementado como un árbol con semántica primer hijo-siguiente hermano, con la información del contacto en las hojas. Considere que el tipo de la información del contacto es: typedef char * InfoContacto ; Implementar, accediendo directamente a la representación, una función ObtenerContacto que, dados un número de teléfono y una agenda, retorne la información del contacto asociado a ese número. La función tiene como precondiciones que el número de teléfono NO es vacío y que debe tener exactamente un contacto asociado (esto es, que indica un camino de la raíz a una hoja). InfoContacto ObtenerContacto ( Telefono tel, Agenda agenda ); El tipo Telefono, de los números de teléfono, es una lista de caracteres. Utilice las operaciones Primero y Resto del TAD Lista para operar sobre el parámetro tel; considere que estas operaciones ya están implementadas. La operación Resto retorna un alias al resto de la lista parámetro (sin su primer elemento). Implementar, accediendo directamente a la representación, una función ImprimirAgenda que imprima en pantalla la información guardada en una Agenda que se pasa como parámetro. void ImprimirAgenda ( Agenda agenda ); El formato de impresión, que muestra la estructura de árbol finitario que representa la agenda, se especifica con el siguiente ejemplo. Si tenemos una variable miagenda con el árbol de ejemplo (ilustrado en la Fig.4), entonces ImprimirAgenda(miagenda) deberá imprimir: Instituto de Computación - Facultad de Ingeniería - UdelaR Página 4 de 5

Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario -0 4=bombero 5=ambulancia =patrullero -6=hora - =emergencia Ejercicio 8 Para trabajar con árboles balanceados es útil guardar en cada nodo información para verificar condiciones de equilibrio. Por ejemplo, en los árboles llamados AVL (que son árboles ABB balanceados) puede guardarse en cada nodo la altura del árbol que tiene a dicho nodo como raíz. Se pide, utilizando la siguiente definición de los árboles binarios de búsqueda de enteros, con información de la altura en cada nodo: struct ABBNodo { 2 int dato ; 3 unsigned int altura ; 4 ABBNodo * izq, * der ; 5 }; 6 typedef ABBNodo * ABB ; Figura 5: Definición de tipo para el TAD ABB balanceado.. Implementar el procedimiento insertar que dado un ABB de enteros definido como en la Figura 5 y dado un entero, inserte a dicho elemento en el ABB (si ya no estaba) manteniendo la información de la altura de cada nodo. Notar que no se pide balancear el árbol, sino simplemente insertar el elemento en el ABB dejando en cada nodo en el campo altura el valor correspondiente, asumiendo que el árbol parámetro guarda en el campo altura de cada nodo el valor correcto. Este procedimiento no puede usar funciones ni procedimientos auxiliares. 2. Implemente una función booleana que retorne TRUE si y sólo si un ABB (del tipo definido anteriormente) es un AVL. Esto es, se cumple que para cada nodo del árbol la altura de sus subárboles izquierdo y derecho difiere a lo sumo en. El árbol vacío es un AVL. Esta función no puede usar funciones ni procedimientos auxiliares. 3. Indique los órdenes de tiempo de ejecución en el peor caso del procedimiento definido en la parte y de la función definida en la parte 2. Justifique brevemente. Instituto de Computación - Facultad de Ingeniería - UdelaR Página 5 de 5