Árboles
Felipe Restrepo Calle
[email protected]
Departamento de Ingeniería de Sistemas e Industrial Facultad de Ingeniería Universidad Universidad Nacional de d e Colombia Sede Bogotá
Árboles Conceptos
Implementaciones
1. Con once cep ptos 2. Impl Implem emen enttacion aciones es 3.Árbole 3. Árboless binarios 4.Recorridos
A. Binarios
Recorridos
Árboles Conceptos
Impl Im plem emen enta taci cion ones es
A. Bi Bina nari rios os
Rec ecor orri rido doss
Desventaja de las listas •
Para una gran cantidad de datos, la complejidad temporal lineal O(N) de algunas operaciones con listas es prohibitivo. –
–
Arreglos: o Insertar o Eliminar
Listas enlazadas: o Acceso
•
¿Es posible mejorar este tiempo?
O(lo logg N) como en el algoritmo de búsqueda binaria
Árboles Conceptos
Desventaja de las listas
Implementaciones
A. Binarios
Recorridos
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Árboles •
Los elementos que constituyen un árbol mantienen una estructura jerárquica, obtenida a partir de estructuras lineales, al eliminar el requisito de que cada elemento tiene como máximo un sucesor.
Árboles Conceptos
Árboles
Implementaciones
A. Binarios
Recorridos
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Aplicaciones de árboles •
Representación de datos jerárquicos: • • • • •
• •
•
Taxonomías Organigramas Genealogías Sistemas de archivos Jerarquía de clases en Java
Algoritmos de búsqueda y ordenación Compiladores (árboles sintácticos, expresiones) …
árboles
de
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Terminología • •
•
•
•
•
Los elementos de los árboles se llaman nodos Conceptualmente se pueden ver los árboles de arriba hacia abajo (como un árbol de genealogía familiar) El nodo que está más arriba es la raíz (root) Los nodos están conectados por enlaces (edges) Hay nodos padres (parent) e hijos (child) Los nodos sin hijos se llaman hojas (leaves)
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Terminología •
•
•
Los nodos que comparten el mismo padre son hermanos (siblings) Un camino (path) es una secuencia de nodos, tal que el siguiente nodo es hijo del anterior
Rama: camino que termina en una hoja
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Terminología •
• •
•
La profundidad (depth) de un nodo es la longitud del camino desde la raíz, es decir, el número de enlaces (ej.: 1) La altura (height) de un árbol es la profundidad máxima (2) Si existe un camino entre dos nodos, se dice que uno de ellos es un ascendiente y el otro es un descendiente Peso: número de hojas del árbol (ej.: 6)
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Terminología •
Grado de un árbol es el número máximo de hijos que pueden tener sus subárboles: • •
•
Si el árbol es n-ario, el grado es n Un árbol con n = 2 se denomina árbol binario
Árbol lleno es un árbol en el que todos sus subárboles tienen n hijos, y además es perfecto, si está lleno y todas sus hojas tienen la misma profundidad.
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Implementaciones de árboles Representaciones • •
Arreglo unidimensional Implementación mediante una lista de hijos
Representaciones • •
secuenciales
enlazadas:
Cada nodo con enlace al primer hijo y hermanos Implementación mediante una lista de listas
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Representación secuencial: arreglo unidimensional •
Se numeran secuencialmente los nodos del árbol hipotéticamente perfecto desde la raíz a las hojas por niveles (comenzando por el nivel 1, después el nivel 2, ) y de izquierda a derecha en cada nivel. La representación secuencial se puede hacer usando un arreglo unidimensional: …
•
la raíz se guarda en la primera posición si un nodo n está en la dirección i , entonces su hijo izquierdo estará en la dirección 2i y su hijo derecho en la dirección 2i + 1
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Representación secuencial: arreglo unidimensional
Árboles Conceptos
Implementaciones
A. Binarios
Representación secuencial: con lista de hijos • •
ArrayList que contiene todos los nodos Cada nodo contiene un dato y una lista de hijos
Recorridos
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Representación enlazada: cada nodo con enlace al primer hijo y hermanos public class TreeNode
{ T dato; TreeNode primerHijo; TreeNode hermanoSiguiente; }
Árboles Conceptos
Implementaciones
A. Binarios
Representación enlazada: lista de listas • •
Más utilizada para árboles N-arios Cada nodo apunta a una lista enlazada de hijos public class TreeNode { T dato; Collection> hijos; }
Recorridos
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Árboles binarios •
•
Cada nodo sólo puede tener como máximo dos hijos: hijo izquierdo e hijo derecho Se simplifica la implementación y la lógica de los algoritmos
Árboles Conceptos
Implementaciones
Implementación de árbol binario public class BinaryNode { T dato; BinaryNode hijoIzq; BinaryNode hijoDer; }
A. Binarios
Recorridos
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Aplicación: árbol de expresiones • •
•
Sirven para almacenar expresiones matemáticas Las hojas serán operandos y los nodos padres serán operadores La mayoría de operadores tienen dos operandos
Ejemplo: ((x + y) * z)/300
Árboles Conceptos
Implementaciones
A. Binarios
Aplicación: árbol de expresiones Ejemplo: (a + b * c) + ((d * e + f ) * g)
Recorridos
Árboles Conceptos
Implementaciones
Aplicación: árbol de decisión Ejemplo:
A. Binarios
Recorridos
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos •
•
•
Recorrer un árbol es visitar cada nodo del árbol una sola vez El recorrido de un árbol permite ver la lista de datos almacenada en el árbol (ordenada según se visitan los nodos) Dos categorías de recorrido:
Recorridos en profundidad o Preorden o Inorden o Postorden
Recorridos en anchura o por niveles
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en profundidad •
Preorden: consiste en visitar al nodo padre y después a sus hijos Árbol n-ario: preorden(TreeNode x) if(x != null){ print(x.dato); for (TreeNode hijo: x.hijos) preorden(hijo); }
Árbol binario:
preorden (BinaryNode x) if(x != null){ print(x.dato); preorden(x.hijoIzq); preorden(x.hijoDer); }
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en profundidad •
Preorden: consiste en visitar al nodo padre y después a sus hijos
Recorrido preorden: ABDEHCFIG
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en profundidad •
Postorden: consiste en visitar a los hijos y después al padre postorden(TreeNode x) Árbol n-ario: if(x != null){ for (TreeNode hijo: x.hijos) postorden(hijo); print(x.dato); }
Árbol binario:
postorden (BinaryNode x) if(x != null){ postorden(x.hijoIzq); postorden(x.hijoDer); print(x.dato); }
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en profundidad •
Postorden: consiste en visitar a los hijos y después al padre
Recorrido postorden: DHEBIFGCA
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en profundidad •
•
Inorden: consiste en visitar al hijo izquierdo, después al padre, y por último, al hijo de la derecha. Exclusivo de árboles binarios.
Árbol binario: inorden (BinaryNode x) if(x != null){ inorden(x.hijoIzq); print(x.dato); inorden(x.hijoDer); }
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en profundidad •
Inorden: consiste en visitar al hijo izquierdo, después al padre, y por último, al hijo de la derecha.
Recorrido inorden: DBHEAFICG
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en anchura o por niveles •
Consiste en visitar los nodos desde la raíz hacia las hojas, y de izquierda a derecha dentro de cada nivel
Algoritmo para árboles binarios: niveles (BinaryNode a) MyQueue c; // cola de BinaryNode BinaryNode aux; c.enqueue(a); while(!c.isEmpty()) aux = c.dequeue(); print(aux); if(aux.hijoIzq != null) c.enqueue(aux.hijoIzq); if(aux.hijoDer != null) c.enqueue(aux.hijoDer);
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos
Recorridos en anchura o por niveles •
Consiste en visitar los nodos desde la raíz hacia las hojas, y de izquierda a derecha dentro de cada nivel.
Recorrido por niveles: ABCDEFGHI
Árboles Conceptos
Implementaciones
A. Binarios
Recorridos Recorrido preorden: ABDEHCFIG Recorrido postorden: DHEBIFGCA Recorrido inorden: DBHEAFICG Recorrido por niveles: ABCDEFGHI
Recorridos