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

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

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

Estructura de Datos Árboles Árboles 2-3

PRÁCTICA No. 9 RECORRIDOS EN ÁRBOLES BINARIOS

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

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

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

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.

Algoritmos y estructuras de datos

LECCION N 08 ARBOLES. Un árbol es un grafo A que tiene un único nodo llamado raíz que:

ELO320 Estructuras de Datos y Algoritmos. Arboles Binarios. Tomás Arredondo Vidal

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

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


Tema 5. Tipos Abstractos de Datos

UNIDAD 9. DATOS COMPLEJOS PILAS

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

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

Algoritmos y Programación II 75.41

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

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

TEMA 5 El tipo grafo. Tipo grafo

Universidad Tecnológica Nacional Facultad Regional Buenos Aires. Gestión de Datos. Árboles

Generación de Código Intermedio

Notas de Clase. Prof. Juan Andrés Colmenares, M.Sc. Instituto de Cálculo Aplicado Facultad de Ingeniería Universidad del Zulia. 21 de febrero de 2004

16 Análisis sintáctico I

Unidad II: Análisis semántico

Clase 26. Introducción a los árboles. Árboles

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

Estructura de datos Colas

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

14. ÁRBOLES Fundamentos y terminología básica

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Estructuras de Datos Orientadas a Objetos. Pseudocódigo y aplicaciones en C#.NET. Capítulo 9.- Grafos

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Unidad I: Introducción a las estructuras de datos

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

INDICE INTRODUCCION1 DESARROLLO2 GRAFOS (CONCEPTO).2 ARISTAS...2 VERTICES2 CAMINOS.3 CLASIFICACION DE GRAFOS...3 GRAFOS EULERIANOS.

Estructuras de Datos. Estructuras de Datos para Conjuntos Disjuntos

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

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Estructura de Datos. TDA: Listas. Primer Semestre, Indice. Tipos de estructura de datos lineales

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

ÁRBOLES BINARIOS GRUPO # 22 Alumnos: Aguilar Elba Barrios Miguel Camacho Yaquelin Ponce Rodríguez Jhonny

Algoritmos y estructuras de datos

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Un. VI. Generador de código intermedio.

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

TAD CONJUNTOS Y MULTICONJUNTOS

Definición 1.1 Sea G = (V, A) un grafo no dirigido. G se denomina árbol si es conexo y no contiene ciclos.

árbol como un conjunto de nodos y líneas

Capitulo V Listas Enlazadas

Tema 6. Gestión dinámica de memoria

Grafos. Suponiendo que e = [u, v]. Entonces los nodos u y v se llaman extremos de e y u y v se dice que son nodos adyacentes o vecinos.

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Análisis amortizado El plan:

Tema 01: Algoritmia y diagramas de flujo. Estructuras de datos (Prof. Edgardo A. Franco)

Matemáticas Discretas Tc1003 Teoría de Grafos

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

ÁRBOLES BINARIOS DE BÚSQUEDA

Estructuras de datos Árboles B

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

GRAMATICAS LIBRES DEL CONTEXTO

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la información de este documento fue tomada textualmente de varios

UNIVERSIDAD AUTÓNOMA DE AGUASCALIENTES CENTRO DE CIENCIAS BÁSICAS DEPARTAMENTO DE SISTEMAS ELECTRÓNICOS OBJETIVO GENERAL MÉTODOS DIDÁCTICOS EVALUACIÓN

Estructuras de datos. Estructuras de datos

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre

Unidad Nº V Listas Enlazadas

Capítulo 6. Relaciones. Continuar

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Tema 6: Memoria dinámica

Tema 10- Grafos. Objetivos:

Tema 13: Apuntadores en C

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo.

TIPO DE DATO ABSTRACTO (TDA)

TIPOS DE ARBOLES. Integrantes: Liliana Xitlali Martinez Lovera Octavio Catarino Aguilar

Tabla de Símbolos. Programación II Margarita Álvarez

Tema: Algoritmos para la ruta más corta en un Grafo.

Tabla de Símbolos. Programación II Margarita Álvarez

Estructuras de datos: Árboles binarios de

Apuntadores en C y C++

TEORÍA DE GRAFOS Ingeniería de Sistemas

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

3. ESTRUCTURAS DE DATOS NO LINEALES

Tema 10- Representación Jerárquica: Tema 10- Representación Jerárquica: Árboles Binarios

Apuntadores (Punteros)

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008

Ordenamiento Avanzado: Shellshort y Quicksort

Universidad de Guadalajara Centro universitario de los Altos Licenciatura en Ingeniería en Computación

Ing. Manuel Ramírez López ITESCA

Elementos de un programa en C

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

EJERCICIOS DE ÁRBOLES BINARIOS

Capítulo 9. Introducción a los lenguajes formales. Continuar

Transcripción:

Estructura de Datos Árboles Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 2010 1 ÍNDIE DE ONTENIDOS oncepto de árbol. Terminología básica Árboles generales Árboles inarios () Árboles inarios de úsqueda () VL Tries Árboles 2-3 Árboles multicamino Árboles Árboles + y * 2 Árboles Los TD s estudiados hasta ahora, son de naturaleza lineal, o unidimensional. En los tipos abstractos de datos lineales existen exactamente un elemento previo y otro siguiente (excepto para el primero y el último, si los hay). En las estructuras no lineales, como conjuntos o árboles, este tipo de secuencialidad no existe, unque en los árboles existe una estructura jerárquica, de manera que un elemento tiene un solo predecesor, pero varios sucesores. 3

Árboles Ejemplos de aplicaciones con estructura de tipo árbol: 4 Árboles Ejemplos de aplicaciones con estructura de tipo árbol: 5 Árboles Ejemplos de aplicaciones con estructura de tipo árbol: 6

Árboles En el campo de la ciencia de la computación existen situaciones en que las representaciones lineales son inadecuadas, tanto en el sentido conceptual como práctico. 7 Árboles En Informática constituyen una de las estructuras más utilizadas, con aplicaciones desde los árboles sintácticos utilizados para la representación y/o interpretación de términos de un lenguaje o expresiones aritméticas, pasando por los árboles de activación de procedimientos recursivos, hasta la representación de datos que se desea mantener ordenados con un tiempo de acceso relativamente bajo. En general, se usarán árboles cuando se quiera representar información jerarquizada. 8 Árboles Se utilizan en distintos ámbitos, en el área de la Informática: Sistemas de rchivos: Estructura de directorios y subdirectorios en forma de árbol para organizar la información. Esquemas para el desarrollo de algoritmos, tales como: programación dinámica, esquema divide y vencerás, etc. Diagrama de clases JV 9

oncepto de árbol Otras áreas: estructura de un libro, diagrama organizativo... MiEmpresa Ventas Producción I+D ES Internacional Portátiles Sobremesa Europa sia mérica 10 Definiciones de árbol Árbol: colección de elementos, llamados nodos, uno de los cuales es la raíz, junto con una relación, padre-hijo, que coloca a todos los nodos en una estructura jerárquica. Un árbol es una estructura de datos no lineal y homogénea en el que cada nodo puede tener varios nodos sucesores, pero tan sólo puede tener un nodo antecesor. 11 Definiciones de árbol Árbol dirigido: estructura jerárquica, organizada y dinámica: Jerárquica: los componentes están en niveles distintos. Organizada: importa la forma en que esté dispuesto el contenido. Dinámica: forma, tamaño y contenido pueden variar durante la ejecución. Un árbol se define recursivamente como: O vacío, O con un componente raíz, al que están unidos un número finito de árboles disjuntos. 12

Definiciones de árbol Los nodos se clasifican dependiendo de su posición dentro del árbol en: Raíz: Elemento mínimo de un árbol. Nodo intermedio (o interno): ualquier nodo predecesor de una hoja, y sucesor de la raíz. Nodo terminal u hoja (o externo): Nodo que no tiene sucesores. 13 Definiciones de árbol Las dos definiciones más comunes son las de árbol general y la de árbol de orden N: Un árbol general con nodos de un tipo T es un par (r, L ) formado por: un nodo r (la raíz) y una lista (si se considera relevante el orden de los subárboles) o un conjunto (si éste es irrelevante) L (bosque), posiblemente vacío, de árboles generales del mismo tipo (subárboles de la raíz). Nota: no existe el árbol vacío, sino la secuencia vacía de árboles generales. 14 oncepto de árbol Los árboles se basan en el concepto de nodo. Se denomina nodo a cualquier tipo cuyos elementos son registros formados por un campo datos y un número dado de apuntadores o enlaces. Un árbol se caracteriza por estar formado por una serie de nodos conectados por una serie de aristas que verifican que: hay un único nodo raíz cada nodo, excepto la raíz, tienen un único padre hay un único camino (desde la raíz hasta cada nodo) 15

oncepto de árbol Un árbol de algún tipo T es: una estructura vacía, o un nodo de tipo T con un número finito de estructuras árbol de tipo T disjuntas llamadas subárboles. <arbol> ::= nulo <nodo> <nodo> ::= <info>{<arbol> Puede estar ordenado o no. 16 Terminología Raíz: único nodo sin padre Nodo interno o interior: tiene al menos un hijo Nodo hoja (externo): no tiene hijos Subárbol: árbol formado por un nodo y sus descendientes Descendiente directo: hijo Descendientes: hijo, nieto... E F I J K G H subárbol D 17 Terminología Nodo Padre de un nodo es aquel que apunta al nodo. En un árbol cada nodo sólo puede tener un padre. Nodo Hijo es cualquier nodo apuntado por el nodo padre. Un nodo puede tener varios hijos. Nodo Raíz es el único nodo del árbol que no tiene padre. En la representación utilizada, el nodo raíz es el que se encuentra en la parte superior del árbol. 18

Terminología Si existe un camino del nodo n 1 a n 2, entonces n 2 es descendiente de n 1 y n 1 es antecesor o ancestro de n 2. La raíz es el único nodo sin antecesor. D E F G H I J K 19 Terminología amino n 1,..., n k : secuencia de nodos en un árbol tal que n i es padre de n i+1 para 1 i < k. camino(,k)={,,f,k camino(,k)={ Largo del camino: número de enlaces que hay desde el primer nodo hasta el último: número de nodos menos uno. Rama: camino desde la raíz a una hoja. D E F G H I J K 20 Terminología n n 1 T 1 n 2 T 2...... n k T k n es la raíz y T 1,...,T k son subárboles de la raíz, donde los nodos n 1,..., n k son conocidos como hijos de n. Note que estos nodos son las raíces de los subárboles T i. 21

Terminología Grado de un nodo: número de descendientes directos (número de subárboles - hijos). El grado de las hojas es cero. Grado del árbol: mayor grado de sus nodos (número máximo de hijos que tienen los nodos del árbol). Una lista es un árbol de grado uno. Árbol binario: árbol de grado 2 ada nodo tiene a lo mas dos descendientes directos Árbol multicamino: árbol de grado mayor que 2 ada nodo puede tener n descendientes directos 22 Terminología Profundidad de un nodo: es el número de predecesores, largo del único camino desde la raíz al nodo. Ejemplo: profundidad() = 0 profundidad(h) = 2 D E F G H I J K 23 Terminología ltura del árbol: profundidad máxima de los nodos,. longitud del camino mas largo (máximo número de enlaces) de las ramas del árbol. Ejemplo: altura = 3 Las ramas --F-K, --F-I y --F-J son las más largas E F G H D I J K 24

Terminología Nivel de un nodo, es el número de nodos del camino desde la raíz hasta el nodo. Por convención al nodo raíz del árbol se le considera el nivel cero del árbol. osque colección de dos o más árboles : D G E H F 25 Terminología Árbol completo: si todo nodo no terminal tiene asociado exactamente el grado del árbol. 10 15 20 25 12 14 9 2 14 17 4 26 Terminología Árbol lleno: si es completo y todas sus hojas están en el mismo nivel. 10 15 20 25 12 14 9 2 14 5 16 17 4 37 34 También se puede definir como el árbol en el que la longitud del camino más largo y la del más corto desde cualquier nodo, son iguales. 27

Terminología Árbol casi-lleno: árbol lleno hasta el penúltimo nivel y las hojas que están en el último nivel se ubican lo más a la izquierda posible. 10 15 20 25 12 14 9 2 14 5 28 Terminología Árbol perfectamente balanceado: El número de nodos de cada subárbol de cada nodo interno, no varía en más de uno. equilibrado sinónimo de balanceado. Árbol balanceado en altura: árbol cuyos subárboles tienen alturas que difieren a lo más en una unidad y también son equilibrados en altura. Árbol degenerado: cada nodo sólo tiene un subárbol. Equivale a una lista. 29 Terminología Árboles Isomorfos:dos árboles son isomorfos si poseen una estructura idéntica, pero no necesariamente los mismos elementos. 15 25 12 2 14 1 5 34 9 23 30

Terminología Árboles semejantes: árboles que poseen los mismos elementos, pero no necesariamente la misma estructura. Los elementos no deben estar necesariamente en el mismo orden. 15 25 12 14 25 2 2 14 12 15 31 Definición TD Árbol Tipos de datos: T: Estructura de árbol v: objeto de tipo rótulo o dato. n: objeto tipo nodo. Funciones: Padre(n, T) n Entrega el nodo padre del nodo n en el árbol T. Hijo_izquierdo(n,T) n Devuelve el hijo que está más a la izquierda del nodo n en el árbol T. 32 Definición TD Árbol Hermano_derecho(n,T) n Devuelve el hermano que está a la derecha del nodo n en el árbol T. Rótulo(n,T) v Entrega el rótulo o dato del nodo n. Raiz(T) n Entrega el nodo raíz del árbol T. nular(t) T Hace que el árbol T sea nulo. 33

Definición TD Árbol Recorridos uando un TD se define mediante relaciones entre sus componentes, los recorridos se pueden hacer siguiendo esas relaciones. uando la relación es con varios aparecen diversas formas de recorrerlos. 34 Definición TD Árbol Recorridos Hay dos formas de recorrido claramente distinguibles en los árboles, el recorrido en profundidad y el recorrido en anchura. El recorrido en anchura visita los nodos por niveles: 35 Definición TD Árbol Recorridos Los recorridos en profundidad se pueden hacer fundamentalmente de tres maneras: Preorden: onsiste en operar primero la raíz, luego hacer una visita en Preorden del hijo izquierdo y después igualmente del hijo derecho. Enorden: onsiste en visitar primero en Enorden el hijo izquierdo, después operar la raíz y finalmente el hijo derecho. Posorden: onsiste en visitar primero en los hijos derecho e izquierdo en Posorden, y después operar la raiz 36

rboles - Representaciones Representación como grafo: D E F G 37 rboles - Representaciones Formas básicas de representar los árboles : rreglos. La representación hijo más izquierdo y hermano derecho. La representación hijo izquierdo, hijo derecho. Listas generalizadas. 38 rboles Implementaciones rreglos. onsiste en un arreglo unidimensional, por ejemplo, en que: [i] es un puntero al padre del nodo i. Si [i] = -1, entonces es la raíz. Nota: qué nodo va más a la izquierda? Una posibilidad es que el orden de izquierda a derecha sea dado según el orden en que están almacenados los nodos en el arreglo. 39

rboles Implementaciones a 0 1 2 b c 3 d 4 5 6 e f g 7 8 9 10 11 h i j k l -1 0 0 0 2 2 3 4 4 5 6 6 0 1 2 3 4 5 6 7 8 9 10 11 40 rboles Implementaciones Listas de hijos. Para cada nodo se forma una lista con los hijos. Dado que los nodos no tienen igual número de hijos, es conveniente usar listas enlazadas, con eso se pueden implementar árboles con un número arbitrario de hijos. En este caso, queda bien definido el orden de los hijos (de izquierda a derecha), que corresponde al orden en la lista. En la implementación, se define un arreglo de punteros, en que p[i] es un puntero a la lista de hijos del nodo i. 41 rboles Implementaciones Ejemplo: 0 a 1 2 3 b c d 4 5 6 e f g 7 8 9 10 11 h i j k l 0 1 2 3 4 5 6 7 8 9 10 11 b c d e f g h i j k l 42

rboles Implementaciones Hijo más izquierdo y hermano derecho. omo puede haber más de un árbol en un arreglo, otra alternativa para implementar esta estructura es mediante nodos y punteros: uno destinado al hijo más a la izquierda y otro al hermano derecho. Hijo Izquierdo Dato Hermano Derecho 43 rboles Implementaciones Ejemplo; para el árbol, se tiene: Hijo_izq info Hno_der D D E E 44 rboles Implementaciones Hijo izquierdo, Hijo derecho Esta representación se basa en una estructura de nodos con dos punteros : Uno destinado al hijo izquierdo y Otro al hijo derecho. Declaración : struct nodor { telemento info; struct nodor* izq; struct nodor* der; ; typedef nodor trbol; izq info der 45

rboles Implementaciones Ejemplo; para el árbol, se tiene: Hijo_izq info Hijo_der D D 46 ROLES Tipos De acuerdo al número de arcos que parten de cada nodo en un árbol, este se puede clasificar en : Árboles Generales, Árboles inarios, Árboles de úsqueda inarios, Árboles VL Árboles2-3, Árboles2-3-4, Árboles Rojo-Negro, Árboles, etc. 47 Árbol binario () Es un árbol de grado 2 ada nodo tiene 0, 1 o 2 descendientes directos: el hijo izquierdo y el hijo derecho (que a su vez son árboles binarios). D E F G H I 48

Árbol binario <arbol> ::= nulo <nodo> <nodo> ::= <izq> <info> <der> <izq> ::= <arbol> <der> ::= <arbol> izq info der D E F G H I 49 Árbol binario plicación: expresiones aritméticas, árboles de decisión, búsqueda () En algunos casos se exige que el árbol sea completo = todo nodo interno tiene dos descendientes. Árbol binario completo Árbol binario no completo 50 Árbol binario Ejemplo: expresiones aritméticas nodo interno: operadores nodos hoja: operandos Ejemplo: 2(a-1)+3b + 2 a 1 3 b 51

Árbol binario Ejemplo de aplicación: árboles de decisión nodo interno: preguntas con respuesta si/no nodos hoja: decisiones Ejemplo: Dónde comemos? omida rápida? Sí on café? No ara? Sí No Sí No Starbucks McDonalds orderio PiccolaItalia 52 Árbol binario: propiedades Notación n: número de nodos e: número de nodos hoja i: número de nodos internos h: altura del árbol Propiedades e 2 h h i 2 h -1 log 2 (n+1)-1 h (n-1)/2 2h+1 n 2 h+1-1 Si es completo: e h+1 e=i+1 53 El TD rin Tipos de datos : struct rin Funciones: rearrbol( ) rin rbolvacio( rin ) boolean SubrbolIzq (rin) rin SubrbolDer (rin) rin telemento(rin) telemento 54

Implementación de Representación Hijo izquierdo, Hijo derecho Estructura de nodos con dos punteros : Uno al hijo izquierdo (raíz del subárbol izquierdo) Otro al hijo derecho (raíz del subárbol derecho). Declaración : struct nodorin { telemento info; struct nodorin* izq; struct nodorin* der; ; typedef nodorin t; izq izq info info der der 55 EJEMPLO D E F izq info der G H D E F G H 56 rboles inarios - Implementaciones De este modo, un árbol se identifica con un puntero a su nodo raíz, a través del cual se puede acceder a sus nodos. D E F G H 57

rboles inarios - Implementaciones void rearrbol (t **) { * * = Null; Para crear un árbol hacer que el puntero a su nodo raíz apunte a Null. boolean rbolvacio (t *) { return ( ( == == Null); Se considera que un árbol está vacío cuando el puntero a su nodo raíz apunta a Null. 58 rboles inarios - Implementaciones void SubrbolIzq (t *; t **subizq) { *subizq = ->izq; Para acceder al subárbol izquierdo basta con acceder al puntero del hijo izquierdo del nodo raíz. void SubrbolDer (t *; t **subder) { *subder = ->der; Para acceder al subárbol derecho basta con acceder al puntero del hijo derecho del nodo raíz. 59 rboles inarios - Implementaciones void DatoRaiz (t *, telemento *d) { // // pasado como parámetro d = ->info; Para acceder al dato contenido en el nodo raíz de un árbol, basta con acceder al campo info del registro que lo representa. telemento DatoRaiz (T *) { // // retornado como valor return( ->info ); ); 60

Árbol binario: recorridos Tipos de recorrido en un árbol binario: In-Orden Pre-Orden Post-Orden 61 Árbol binario: recorridos Recorrido IN-ORDEN cada nodo se visita después de visitar su subárbol izquierdo y después se visita el derecho. (izq, raiz, der) Ejemplo: h i m e a in-orden: (i, e, h, a, m) 62 Recorridos en rboles inarios Inorden: primero se accede a la información del subárbol izquierdo, después la información del nodo y, por último, se accede a la información del subárbol derecho. void InOrden (t *) { if if ( (!= NULL) { InOrden(->izq); // // recorrido por la la izquierda printf("%d ",->info); // // telemento es es int int InOrden(->der); // // recorrido por la la derecha 63

Recorridos en rboles inarios D E F G H InOrden (IRD): D - - -G -E -H - -F 64 Árbol binario: recorridos Recorrido PRE-ORDEN primero se visita cada nodo, luego su subárbol izquierdo y finalmente el derecho (raiz, izq, der) Ejemplo: h i m e a pre-orden: (h, i, e, m, a) 65 Recorridos en rboles inarios Preorden: primero se accede a la información del nodo, después al subárbol izquierdo y después al subárbol derecho. void PreOrden (t *) { if if ( (!= NULL) { printf("%d ",->info); // // telemento es es int int PreOrden(->izq); // // recorrido por la la izquierda PreOrden(->der); // // recorrido por la la derecha 66

Recorridos en rboles inarios D E F G H PreOrden (RID): --D--E-G-H-F 67 Árbol binario: recorridos Recorrido POST-ORDEN cada nodo se visita después de visitar su subárbol izquierdo y después de visitar el derecho (izq, der, raiz) Ejemplo: h i m e a post-orden: (e, i, a, m, h) 68 Recorridos en rboles inarios Postorden: primero se accede a la información del subárbol izquierdo, después la del subárbol derecho y, por último, la información del nodo. void PostOrden (t *) { if if ( (!= NULL) { PostOrden(->izq); // // recorrido por la la izquierda PostOrden(->der); // // recorrido por la la derecha printf("%d ",->info); // // telemento es es int int 69

Recorridos en rboles inarios D E F G H PostOrden (IRD): D - -G -H -E -F - - 70 Ejemplo de recorrido de Ejemplo: Recorridos en las expresiones aritméticas pre-orden: notación prefija (polaca) in-orden: notación normal (sin paréntesis) post-orden: notación polaca inversa 2 a 1 + 3 b pre-orden: + x 2 - a 1 x 3 b in-orden: 2 x a - 1 + 3 x b post-orden: 2 a 1 - x 3 b x + Ejercicio: escribir el pseudocódigo para que el recorrido en in-orden incluya los paréntesis. 71 Reconstrucción de rboles Es posible reconstruir la estructura de un árbol dado su recorrido inorden y postorden ó inorden y preorden. inorden es imprescindible. 72

Reconstrucción de rboles Ejemplo : dados los siguientes recorridos InOrden : 30 60 20 80 70 40 10 90 50 PostOrden : 60 30 80 70 40 20 50 90 10 Reconstruir el árbol binario, que originó ambos recorridos. 73 Reconstrucción de rboles Solución : InOrden (IRD): 30 60 20 80 70 40 10 90 50 PostOrden (IDR) : 60 30 80 70 40 20 50 90 10 Paso 1: InOrden : 30 60 20 80 70 40 10 90 50 30 60 20 80 70 40 90 50 74 Reconstrucción de rboles InOrden (IRD): 30 60 20 80 70 40 10 90 50 PostOrden (IDR) : 60 30 80 70 40 20 50 90 10 Paso 2: InOrden : 30 60 20 80 70 40 10 90 50 30 60 20 80 70 40 90 50 50 75

Reconstrucción de rboles InOrden (IRD): 30 60 20 80 70 40 10 90 50 PostOrden (IDR) : 60 30 80 70 40 20 50 90 10 Pasos 3 y 4: InOrden: 30 60 20 80 70 40 10 90 50 30 60 20 80 70 40 90 50 30 60 80 70 40 50 76 Reconstrucción de rboles InOrden (IRD): 30 60 20 80 70 40 10 90 50 PostOrden (IDR) : 60 30 80 70 40 20 50 90 10 Paso 5 : InOrden: 30 60 20 80 70 40 10 90 50 30 60 20 80 70 40 90 50 30 60 80 70 40 50 80 70 77 Reconstrucción de rboles InOrden (IRD): 30 60 20 80 70 40 10 90 50 PostOrden (IDR) : 60 30 80 70 40 20 50 90 10 Pasos 6 y 7: InOrden: 30 60 20 80 70 40 10 90 50 30 60 20 80 70 40 90 50 30 60 80 70 40 50 80 70 80 78

Reconstrucción de rboles InOrden (IRD): 30 60 20 80 70 40 10 90 50 PostOrden (IDR) : 60 30 80 70 40 20 50 90 10 Pasos 8 y 9: InOrden : 30 60 20 80 70 40 10 90 50 30 60 20 80 70 40 90 50 30 60 80 70 40 50 60 80 70 80 79 Reconstrucción de rboles Finalmente : 10 20 90 30 40 50 60 70 80 80 Reconstrucción de rboles Ejemplo: InOrden : 50 30 60 20 80 70 90 40 10 PreOrden : 10 20 30 50 60 40 70 80 90 81

Reconstrucción de rboles Solución : InOrden (IRD) : 50 30 60 20 80 70 90 40 10 PreOrden (RID) : 10 20 30 50 60 40 70 80 90 Paso 1: InOrden : 50 30 60 20 80 70 90 40 10 50 30 60 20 80 70 90 40 82 Solución : Paso 2: Reconstrucción de rboles InOrden (IRD) : 50 30 60 20 80 70 90 40 10 PreOrden (RID) : 10 20 30 50 60 40 70 80 90 InOrden: 50 30 60 20 80 70 90 40 10 50 30 60 20 80 70 90 40 50 30 60 80 70 90 40 83 Solución : Reconstrucción de rboles InOrden (IRD) : 50 30 60 20 80 70 90 40 10 PreOrden (RID) : 10 20 30 50 60 40 70 80 90 Pasos 3, 4 y 5: InOrden : 50 30 60 20 80 70 90 40 10 50 30 60 20 80 70 90 40 50 30 60 80 70 90 40 50 60 84

Reconstrucción de rboles Solución: InOrden (IRD) : 50 30 60 20 80 70 90 40 10 PreOrden (RID) : 10 20 30 50 60 40 70 80 90 Paso 6: InOrden: 50 30 60 20 80 70 90 40 10 50 30 60 20 80 70 90 40 50 30 60 80 90 70 40 50 60 80 70 90 85 Reconstrucción de rboles Solución: InOrden (IRD) : 50 30 60 20 80 70 90 40 10 PreOrden (RID) : 10 20 30 50 60 40 70 80 90 Pasos 7, 8 y 9: InOrden : 50 30 60 20 80 70 90 40 10 50 30 60 20 80 70 90 40 50 30 60 80 70 40 90 50 60 80 70 90 80 90 86 Reconstrucción de rboles Finalmente : 10 20 30 40 50 60 70 80 90 87

Recorridos en amplitud (o por niveles) void voidamplitud(trbol *a) *a) { El recorrido se realiza en orden por los tola cola; cola; trbol *aux; distintos niveles del árbol,comenzando if if (a (a!=!= NULL) { en el nivel 1, que sólo contiene el nodo crearola(cola); raíz, luego el nivel 2, el 3, etc. encolar(cola, a); a); while (!colavacia(cola)) { desencolar(cola, aux); visitar(aux); //Realiza una una operación en en nodo nodo if if (aux->hizquierdo!=!= NULL) encolar(cola, aux->hizquierdo ); ); if if (aux->hderecho!= NULL) encolar(cola, aux->hderecho); 88 Ejercicios int intontarhojas (t *arb) { // // Determina el el número de de hojas en en un un árbol binario. if if (arb == == NULL) return 0; 0; else if( if( (arb ->izq == == NULL) && (arb ->der == == NULL) )) return 1; 1; else return(ontarhojas(arb ->izq) + ontarhojas(arb ->der)); 89 Ejercicios int intaltura (t *arb) { // // alcula la la altura de de un un árbol binario. if if arb == == NULL return -1; -1; else return (1+ max(altura(arb -> -> izq),altura(arb -> -> der))); 90

Ejercicios struct Nodo *opiar(struct Nodo *T) { // // copia rin T, T, retornando dirección de de copia struct Nodo *Q *Q =NULL; if if (T (T!!(NULL) { Q = (struct Nodo *) *) malloc (sizeof (struct Nodo)); Q -> -> dato = T -> -> dato; Q -> -> izq = opiar (T (T-> izq); Q -> -> der = opiar (T (T-> der); struct Nodo { return Q; Q; telemento info; struct Nodo *izq, *der; 91 Ejercicios int intigual (struct Nodo *S, struct Nodo *T) { // // verifica que los los árboles S y T sean iguales :: true (1) (1) int intans = 0; 0; if if ((S ((S = NULL) && (T=NULL)) ans = 1; 1; if if ((S!= NULL) && (T!=NULL)) { if if (S (S-> dato == == T -> -> dato) ans = Igual (S (S-> izq, T -> -> izq); if if (ans) ans = Igual (S (S-> der, T -> -> der); return ans; 92 Ejercicios Propuestos Escribir una función en para calcular el peso de un árbol binario. (El peso se define como el número de nodos). Escribir una función en para determinar si un elemento cualquiera pertenece a un árbol binario. Escribir una función en para calcular el número de veces que aparece un elemento en un árbol binario. 93

plicación Una de las aplicaciones de la correspondencia entre árboles y árboles binarios es la representación de expresiones aritméticas usando NOTION POL. Usada en compiladores, ya que es más fácil traducir de notación polaca a instrucciones de máquina. 94 plicación Para el siguiente árbol de expresión algebraica: + * E / D ** Inorden : /** * D+E (infijo) Preorden : +*/**DE (prefijo) Postorden : **/ D*E+ (postfijo) 95 Ejercicios Propuestos 1. Dibujar el árbol binario que representa las siguientes expresiones: a) a * (b + c / ((x - 1) * (y + 4))) + x * x - 24 b) a 0 + x * (a 1 + x * (a 2 + x * a 3 )) 2. Reconstruir un árbol binario a partir de los siguientes recorridos : a) Preorden: 2, 5, 3, 9, 7, 1, 6, 4, 8. Inorden: 9, 3, 7, 5, 1, 2, 6, 8, 4. b) Inorden: 5, 6, 12, 10, 1, 9, 13, 4, 8, 2, 7, 3, 11. Postorden: 6, 5, 10, 9, 1, 13, 12, 2, 8, 3, 11, 7, 4. 96

Ejercicios Hacer una función en que escriba todos los caminos que van desde la raíz a cada una de las hojas, suponiendo que cada nodo contiene un carácter. M Por ejemplo, en el árbol : O I deberían obtenerse las palabras: MOLER, MOL, MOK, MOT, MIRR, MIRO, MIS, MISTO y MÍSTIO. E R L K T R R O S T O I O 97 Desde árboles generales a Existe una correspondencia uno a uno entre los árboles generales y árboles binarios. Un árbol general se convierte en árbol binario: El enlace izquierdo representa al primer hijo (en el árbol general). El enlace derecho al siguiente hermano (en el árbol general). 98 Desde árboles generales a D E F G H I J K L M N O P Q 99

Desde árboles generales a hijo hermano D E F G H I J K L M N O P Q 100 ibliografía - Webgrafía Introduction to lgorithms, 2nd edition. ormen, T., Leiserson, h., Rivest, R. and Stein,. MIT Press. 2001. Data Structures and lgorithms.. ho, J. Hopcroft, and J. Ullman. ddison-wesley, 1983. Traducido al castellano, 1988. The rt of omputer Programming. Vol. 3: Searching and Sorting. Donald E. Knuth. ddison-wesley, Massachusetts, 1973. Traducido al castellano en Ed. Reverté, arcelona. Programación Modular. ETSIT. Guión del profesor Juan Falgueras, urso 2005. Estructuras de Datos y lgoritmos, M.. Weiss, ddison- Wesley Iberoamericana, 1995. http://www.lcc.uma.es/~galvez/ftp/tad/tadtema4.pdf 101 ibliografía - Webgrafía http://usuarios.multimania.es/sanjudas/download/resumenrboles.pdf http://delta.cs.cinvestav.mx/~adiaz/anadis/intree.pdf http://www.ucema.edu.ar/~rst/lgoritmos_y_estructura_de_datos /Teoria/5._rboles_binarios.pdf http://www.iuma.ulpgc.es/users/jmiranda/docencia/programacion/ Tema7_ne.pdf 102