rboles Estructuras de Datos MC Beatriz Beltrn Martnez
Árboles Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2019
FCC-BUAP MC Beatriz Beltrán Martínez • Aparecen estructuras de tipo árbol en: • Sistemas Operativos: Sistema de archivos (Árbol de directorios). • Compiladores, procesadores de textos, algoritmos de búsqueda. • Elementos: • Nodos. • Conexiones (dirigidas) entre pares de nodos. • Un nodo particular: Raíz. • Cada nodo (excepto raíz) está conectado al menos con otro (padre). Relación padre-hijo. Primavera 2019 Introducción 99
FCC-BUAP MC Beatriz Beltrán Martínez Un único camino conduce de la raíz a cada nodo. Longitud del camino: Número de conexiones a atravesar. Nodos sin hijos: Hojas (leaves). Árbol con N nodos óN-1 conexiones entre nodos. Profundidad de un nodo: • Longitud del camino raíz ðnodo. • Altura de un nodo: • Longitud del camino desde el nodo a su hoja más profunda. • Hermanos: Nodos con el mismo padre (siblings). • • • Primavera 2019 Conceptos 100
FCC-BUAP MC Beatriz Beltrán Martínez • El grado de un nodo es el número de flechas que salen de ese nodo. • El grado de un árbol es el mayor de los grados que puede hallarse en el árbol. • Un camino de un nodo n 1 a otro nk, se define como la secuencia de nodos n 1, n 2, . . . nk tal que ni es padre de ni+1 para 1 i < k. • Longitud del camino entre 2 nodos, es el número de arcos que hay entre ellos. Primavera 2019 Conceptos 101
FCC-BUAP MC Beatriz Beltrán Martínez • Relación antepasado (u) / descendiente (v): • Si hay camino de u a v. • Tamaño de un nodo: • Número de descendientes (incluyendo al nodo). • Árbol (definición recursiva): • o es vacío, • o consiste en una raíz y cero o más (sub)árboles no vacíos A 1. . Ak conectados a la raíz. Primavera 2019 Conceptos 102
FCC-BUAP MC Beatriz Beltrán Martínez 1. Cada nodo contiene: • Referencias a todos sus hijos. • Datos almacenados en el nodo. • Problema: Número de hijos desconocido. 2. Cada nodo: • Lista con sus hijos. • Referencia a los datos contenidos. • Referencia a su nodo hermano. • Representación "first child / next sibling“. Primavera 2019 Implementación 103
Primavera 2019 Implementación null MC Beatriz Beltrán Martínez sig. Hermano primer. Hijo FCC-BUAP nodo. Raiz null null null 104
FCC-BUAP MC Beatriz Beltrán Martínez • Ningún nodo puede tener más de N hijos. • El más utilizado: Binario, 2 hijos (left, right). • Definición recursiva (Árbol binario): • . . . o es vacío. • . . . o tiene raíz, árbol derecho, árbol izquierdo. • Implementación: • Conocido el número de hijos. 2 referencias. Primavera 2019 Árbol N-ario 105
FCC-BUAP MC Beatriz Beltrán Martínez • Árbol binario lleno (full binary tree). • Todas las hojas tiene la misma profundidad. • El resto de nodos (no terminales) tienen 2 hijos. • Árbol binario completo (complete binary tree). • Cada nivel (excepto el más profundo) debe contener todos sus posibles nodos. • En el nivel más profundo, los nodos están lo más a la izquierda que sea posible. Primavera 2019 Árboles Binarios 106
Evaluación de la expresión: Evaluación de los subárboles (recursivamente). Aplicación del operador a los valores obtenidos. 6 + ((7 - 3) * 5) + 6 * - 7 FCC-BUAP MC Beatriz Beltrán Martínez • Un nodo terminal representa un operando. • El resto de los nodos representan operadores (binarios). Primavera 2019 Expresiones 5 3 107
FCC-BUAP MC Beatriz Beltrán Martínez • El tipo árbol se define recursivamente. • Muchas rutinas para manejo de árboles se implementan fácilmente de forma recursiva. public class Nodo. Binario { Object dato; dato Nodo. Binario left; left right Nodo. Binario right; public Nodo. Binario (Object elemento) { dato = elemento; left = null; right = null; } // Métodos. . . } Primavera 2019 Recursividad 108
FCC-BUAP MC Beatriz Beltrán Martínez • Recorrido: • Acceso a todos los nodos de un árbol • Ej: Para realizar una operación en cada nodo • Fácil implementación mediante recursividad. • Tipos de recorrido: • Según el orden en que se "visitan" los nodos. • Recorrido preorder. • Recorridos postorder. • Recorridos inorder. Primavera 2019 Recorridos 109
// en la clase Nodo. Binario public void mostrar. Preorden() { System. out. println(dato); if (left != null) left. mostrar. Preorden(); if (right != null) right. mostrar. Preorden(); } Preorden 1 2 3 4 6 5 MC Beatriz Beltrán Martínez • Recorrido preorden: 1. Nodo raíz 2. Subárbol left en preorden 3. Subárbol right en preorden FCC-BUAP Primavera 2019 Recorridos 7 110
Inorden 2 1 // en la clase Nodo. Binario public void mostrar. Inorden() { if (left != null) left. mostrar. Inorden(); System. out. println(dato); if (right != null) right. mostrar. Inorden(); } 5 3 7 4 MC Beatriz Beltrán Martínez • Recorrido inorden: 1. Subárbol left en inorden 2. Nodo raíz 3. Subárbol right en inorden FCC-BUAP Primavera 2019 Recorridos 6 111
Postorden 7 1 // en la clase Nodo. Binario public void mostrar. Postorden() { if (left != null) left. mostrar. Postorden(); if (right != null) right. mostrar. Postorden(); System. out. println(dato); } 6 3 5 2 MC Beatriz Beltrán Martínez • Recorrido postorden: 1. Subárbol left en postorden 2. Subárbol right en postorden 3. Nodo raíz FCC-BUAP Primavera 2019 Recorridos 4 112
- Slides: 15