Estructura de Datos. Unidad V Estructuras no lineales estáticas y dinámicas. (Árboles y grafos)

Documentos relacionados
Algoritmos y estructuras de datos

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

Tema 09: TAD Árbol binario

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Estructuras de datos utilizando JAVA

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

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

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

Tema: ARBOLES. Instructor: MC. Gerardo Gálvez Gámez Junio de 2018 INTRODUCCIÓN:

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Estructura de Datos Unidad 6: ARBOLES

CAPÍTULO 2. ÁRBOLES 2.0. CONCEPTOS GENERALES

PRÁCTICA No. 9 RECORRIDOS EN ÁRBOLES BINARIOS

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

Francisco J. Hernández López

Tema: Arboles en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Definición de Árbol Binario. Programación IV. Guía No.

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Estructura de Datos. Índice

ARBOLES ARBOLES COMPUTACIONALES MATEMATICAS DISCRETAS II

Francisco J. Hernández López

Capítulo 8. Árboles. Continuar

Programación II Arboles Binarios(AB)

Definiciones: conjuntos, grafos, y árboles. Agustín J. González ELO 320: Estructura de Datos y Algoritmos. 2002

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

1. Leer el primer número y almacenarlo en la raíz del árbol. 2. Repetir hasta encontrar un duplicado o el árbol esté vacío.

Arboles Binarios de Búsqueda en C++

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

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

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

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

Estructuras de Datos y Algoritmos

Estructuras de Datos ARBOLES Y GRAFOS

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

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

RECORRIDO EN ARBOLES

Árboles y esquemas algorítmicos. Tema III

El TAD Árbol. El TAD Árbol

ESTRUCTURAS DE DATOS Y ALGORITMOS

Árboles Binarios Ordenados Árboles AVL

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

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la

Definición recursiva de los árboles

Programación II Tema 5. Árboles binarios

Programación Estructuras Arborescentes

Á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.

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial

Tema 4. Estructura de datos no lineales Arboles y Grafos. J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.

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

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

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.

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

Descubrir los árboles como paradigma de los tipos Recursivos de Datos

Listas Posicionales. Listas posicionales

Introducción a Árboles Árboles Binarios

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

Definición de árbol. Árboles

árbol como un conjunto de nodos y líneas

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

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Algoritmos y Programación II Curso 2006

Carlos Delgado Kloos Mª Carmen Fernández Panadero Raquel M. Crespo García Ingeniería Telemática Univ. Carlos III de Madrid

Diseño y Análisis de Algoritmos con Java(I Sem. 2004) Prof. Dr.Eric Jeltsch F.

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

Tema Árboles binarios fmap para árboles binarios Plegado de árboles binarios

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Árboles Carlos Delgado Kloos Mª Carmen Fernández Panadero Raquel M. Crespo García Ingeniería Telemática Univ. Carlos III de Madrid

Tema 4. Estructuras no lineales de datos: árboles

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

Introducción a Árboles Árboles Binarios

Existen varios tipos de árboles: 5.1 Árboles binarios

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

Tema: Recorrido de Grafos

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

UNIVERSIDAD AUTONOMA DEL ESTADO DE MEXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO ESTRUCTURAS DE DATOS ING. GREGORIO GARCIA ESTRADA INTEGRANTES:

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

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

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 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.

Tema 2: Grafos y Árboles. Algoritmos y Estructuras de Datos 3

Estructuras de datos y algoritmos

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva:

PRÁCTICA No. 13 ÁRBOL BINARIO DE BÚSQUEDA

Estructura de Datos. Árboles. Árboles. Primer Semestre, 2010 ÍNDICE DE CONTENIDOS

Capitulo VI Árboles y Grafos

Programación Declarativa Universidad de Málaga

Laboratorio de Estructuras de Datos II

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

Segunda parte de árboles

4.1 Concepto de árbol.

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz

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

Estructura de Datos. Listas Enlazadas

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Arboles. Definiciones formales: 1) un árbol es un grafo acíclico finito T (P, E) tal que. P = E + 1 => todo arco es desconectante.

TEMA 5 El tipo grafo. Tipo grafo

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

Definición 1: Un grafo G es una terna ordenada (V(G), E(G), Ψ

Transcripción:

Ing. En Sistemas Computacionales Estructura de Datos Unidad V Estructuras no lineales estáticas y dinámicas. (Árboles y grafos) Ing. Néstor Alejandro Carrillo López

Arboles Un árbol es un conjunto finito de nodos: 1. Si la colección es vacía, se dice que el árbol es vacio 2. En caso contrario, un árbol A consiste de un nodo especial llamado raíz y n (sub)arboles no vacios T 1,T 2,,T n. La raíz de A se conecta con la raíz de cada T i por un arco dirigido.

Relaciones entre nodos Todo nodo n j, exceptuando el raíz, esta conectado exclusivamente a otro nodo n k donde: n j es el padre de n k (Ej., B es el padre de E) n k es uno de los hijos de n j (Ej., E es un hijo de B) Nodos con el mismo padre son hermanos (Ej., B, C y D) Nodos sin hijos son llamados hojas (Ej., G)

Un árbol binario es un árbol en el cual cada nodo puede tener como máximo dos hijos Un árbol binario se define como: un árbol vacio, o un nodo raíz con un subárbol izquierdo y un subárbol derecho Árboles binarios

Representación en Memoria Hay dos formas tradicionales de representar un árbol binario en memoria: Por medio de datos tipo punteros también conocidos como variables dinámicas o listas. Por medio de arreglos(estáticas). Sin embargo, la más utilizada es la primera, puesto que es la más natural para tratar este tipo de estructuras.

Representación en Memoria Los nodos del árbol binario serán representados como registros que contendrán como mínimo tres campos. En un campo se almacenará la información del nodo. Los dos restantes se utilizarán para apuntar al subárbol izquierdo y derecho del subárbol en cuestión. Cada nodo se representa gráficamente de la siguiente manera:

Declaración de árbol binario Se definirá el árbol con un dato de tipo objecto (puede ser cualquier otra tipo de datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces con los hijos se utilizan punteros. El árbol vacío se representará con un puntero nulo. La clase nodo binario puede declarar de la siguiente manera: Class NodoB{ Object dato; NodoB izq; NodoB der; } NodoB (){ this (null);} NodoB ( Object o ) { this(o,null,null);} NodoB(Object o, NodoB i, NodoB d) {dato=0; izq=i; der=d;}

Declaración de árbol binario Se definirá el árbol con un dato de tipo objecto (puede ser cualquier otra tipo de datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces con los hijos se utilizan punteros. El árbol vacío se representará con un puntero nulo. La clase nodo binario puede declarar de la siguiente manera: public class NodoBinario { //atributos Object dato; NodoBinario izquierdo; NodoBinario derecho; //constructores public NodoBinario() { this(null); } public NodoBinario(Object eldato) { this( eldato, null, null); } public NodoBinario(Object eldato, NodoBinario menor, NodoBinario mayor) { dato=eldato; izquierdo=menor; derecho=mayor; }

Operaciones básicas en arboles Crear un árbol vacio Verificar si el árbol esta vacio Insertar un nodo Eliminar un nodo Recorrer un árbol

Recorridos de arboles Procedimientos que visitan todos los nodos de un árbol efectuando una acción sobre cada uno. Existen dos formas posibles de recorrer un árbol no vacio Amplitud: el proceso se realiza horizontalmente desde la raíz a todos sus hijos, luego a los hijos de sus hijos y así sucesivamente Profundidad: se sigue un camino desde la raíz a través de un hijo antes de proseguir al siguiente hijo

Ejemplo de recorrido en amplitud

Recorridos en profundidad Existen tres formas posibles de recorrer en profundidad un árbol no vacio, según cuando la raíz sea visitada Pre orden inorden Post-orden Recorrido Características se visita la raíz; se recorre el subárbol izquierdo; se recorre el subárbol derecho; se recorre el subárbol izquierdo; se visita la raíz; se recorre el subárbol derecho; se recorre el subárbol izquierdo; se recorre el subárbol derecho; se visita la raíz;

Recorridos en profundidad Pre orden se visita la raíz; se recorre el subárbol izquierdo; se recorre el subárbol derecho;

Recorridos en profundidad Recorrido inorden se recorre el subárbol izquierdo; se visita la raíz; se recorre el subárbol derecho;

Recorridos en profundidad Post-orden se recorre el subárbol izquierdo; se recorre el subárbol derecho; se visita la raíz;

Carga (Nodo) 1. leer información (INFO) 2. Hacer NODO^.INFO <- INFO 3. Escribir Existe nodo por la izquierda? 4. Leer respuesta 5. Si respuesta es afirmativa entonces CREA (OTRO) {Crear un nuevo nodo} Hacer NODO^.IZQ<-OTRO Regresar a CARGA con NODO^.IZQ {Llamada recursiva} si no Hacer NODO^.IZQ<-Null 6. {Fin del condicional del paso 5} 7. Escribir Existe nodo por derecha? 8. Leer respuesta 9. Si respuesta es afirmativa entonces CREA (OTRO) {Crea un nuevo nodo} Hacer NODO^.DER <-OTRO Regresar a CARGAR con NODO^.DER {Llamada recursiva} si no Hacer NODO^.DER<- Null 10. {Fin de condicional del paso 9}

Algoritmo de preorden PREORDEN(NODO) {El algoritmo realiza el recorrido preorden en un árbol binario. NODO es un dato de tipo puntero } {INFO, IZQ Y DER son campos del registro nodo. INFO es una variable de tipo carácter. IZQ y DER son variables de tipo puntero} 1. Si NODO <> Null entonces visitar el NODO {Escribir NODO^.INFO} Regresar a PREORDEN con NODO^.IZQ {Llamada recursiva a PREORDEN con la rama izquierda del nodo en cuestión} Regresar a PREORDEN con NODO^.DER {Llamada recursiva a PREORDEN con la rama derecha del nodo en cuestión} 2. {Fin de condicional del paso 1}

INORDEN (NODO) {El algoritmo realiza el recorrido inorden en un árbol binario. NODO es un registro de tipo puntero} {INFO, IZQ y DER son campos del registro nodo. INFO es una variable de tipo carácter. IZQ y DER son variables de tipo puntero} 1. Si NODO <> Null entonces Regresar a INORDEN con NODO^.IZQ {Llamada recursiva a INORDEN con la rama izquierda del nodo en cuestion} Visitar el NODO {Escribir NODO^.INFO} Regresar a INORDEN con NODO^.DER {Llamada recursiva a INORDEN con la rama derecha del nodo en cuestión} 2. {Fin de condicional del paso 1}

POSTORDEN(NODO) {El algoritmo realiza el recorrido postorden en un árbol binario. NODO es un dato de tipo puntero} {INFO, IZQ y DER son campos del registro nodo. INFO es una variable de tipo carácter IZQ y DER son variables de tipo puntero} 1. Si NODO<>Null entonces Regresa POSTORDEN con NODO^.IZQ {Llamada recursiva a POSTORDEN con la rama izquierda del nodo en cuestión} Regresar a POSTORDEN con NODO^.DER {Llamada recursiva a POSTORDEN con la rama derecha del nodo en cuestion} Visitar el NODO {Escribir NODO^.INFO} 2. {Fin de condicional del paso 1}

Grafos Un grafo G es un par (V,E), tal que: V: conjunto de nodos E: conjunto de arcos conectando a los nodos en V Un arco e = (u,v) es un par de nodos

Grafos dirigidos y no dirigidos Dirigido (o Digrafo) Cada linea tiene una direcciona su sucesor Note que <vi, vj> <vj, vi> No dirigido Las lineas no tienen direccion Note <vi, vj> = <vj, vi>

Operaciones en grafos Considere un grafo G y dos nodos x y y -añade(g, x,y): añade en G un arco de x a y, si no existe - borra(g, x,y): suprime un arco de x a y, si existe - adyacente(g, x,y): verifica si hay un arco de x a y en G - vecinos(g, x): lista todos los nodos y tal que hay un arco entre x y y

Operaciones en grafos En los grafos que tienen valores asociados a sus arcos, también se tienen: - asigna_valor(g, x,y,v): asigna el valor asociado al arco (x,y) a v. -obtener_valor(g, x,y): regresa el valor asociado al arco (x,y).