210 likes | 721 Views
Arboles (Trees). Arboles Arboles binarios Recorridos de árboles Patrón método template Estructuras de datos para árboles. Arboles. un árbol representa una jeraquía ejemplos : estructura organizativa de una empresa. tabla de contenido de un libro. Arboles (1).
E N D
Arboles (Trees) • Arboles • Arboles binarios • Recorridos de árboles • Patrón método template • Estructuras de datos para árboles
Arboles • un árbol representa una jeraquía • ejemplos: • estructura organizativa de una empresa tabla de contenido de un libro
Arboles (1) • ` Sistema de ficheros de Unix o DOS/Windows
Arboles (2) • Representación: • Conjuntos anidados • Paréntesis anidados • Indentación • Grafo • Representación más usual: grafo
Terminología de Arboles • A es el nodo raíz • B es el padre de D y E • C es el primo de B • D y E son los hijos de B • D, E, F, G, I son nodos externos o • hojas • A, B, C, H son nodos internos • La profundidad (nivel) de E es 2 • La altura del árbol es 3 • El grado del nodo B es 2 • Propiedad: (#aristas) = (#nodos) - 1
Arboles binarios • Arbol ordenado: el hijo de cada nodo está ordenado • Arbol binario: árbol ordenado con todos los nodos internos de • grado 2 • Definición recursiva de árbol binario: • Un árbol binario es: • - un nodo externo (hoja) o • - un nodo interno (la raíz) y dos árboles binarios (subárbol • izquierdo y subárbol derecho)
Ejemplos de Arboles Binarios • expresión aritmética • río especial
Ejemplos de Arboles Binarios • Árboles de decisión
Propiedades de Arboles Binarios • (# nodos externos) = (# nodos internos) + 1 • (# nodos nivel i) 2 i • (# nodos externos) 2 altura • (altura) log2 (# nodos externos) • (altura) log2 (# nodos) - 1 • (altura) (# nodos internos) - ((# nodos) - 1)/2
TDAs para Arboles • Métodos contenedor genéricos -size(), isEmpty(), elements() • Métodos contenedor posicionales -positions(), swapElements(p,q), replaceElement(p,e) • Métodos consulta -isRoot(p), isInternal(p), isExternal(p) • Métodos acceso -root(), parent(p), children(p) • Métodos actualización -específico de la aplicación
TDAs para Arboles Binarios • Métodos acceso -leftChild(p), rightChild(p), sibling(p) • métodos actualización -expandExternal(p), removeAboveExternal(p) -otros métodos específicos de la aplicación
Recorrido de árboles (1) • recorrido preorder AlgoritmopreOrder(v) “visitar” nodov for eachhijo w de vdo realizar recursivamentepreOrder(w) • Ejm: lectura de un documento desde el inicio hasta el final
Recorrido de árboles (2) • recorrido postorder AlgoritmopostOrder(v) for eachhijo w de vdo realizar recursivamente postOrder(w) “visitar” nodo v • comando du (disk usage) de Unix
Evaluación de Expresiones Aritméticas AlgoritmoevaluateExpression(v) if ves un nodo externo return la variable almacenada en v else asignar a o el operador almacenado env x evaluateExpression(leftChild(v)) y evaluateExpression(rightChild(v)) returnx o y • especialización de recorrido postorder
Recorrido de árboles (3) Algoritmo inOrder(v) realizar recursivamente inOrder(leftChild(v)) “visitar” nodo v realizar recursivamente inOrder(rightChild(v)) • recorrido inorderde un árbol binario • impresión de una expresión aritmética • especialización de un recorrido inorder • print “(“ antes de recorrer el subárbol izquierdo • print “)” antes de recorrer el subárbol derecho
1 2 3 4 5 6 7 8 9 10 Recorrido de árboles (4) Inorden: 8 4 9 2 10 5 1 6 3 7 Preorden: 1 2 4 8 9 5 10 3 6 7 Postorden: 8 9 4 10 5 2 6 7 3 1
Recorrido de Euler en Arboles Binarios • Recorrido genérico de un árbol binario • los recorridos preorder, inorder, y postorder son casos especiales del recorrido de Euler • “caminar alrededor” del árbol y visitar cada nodo tres veces: • a la izquierda • desde abajo • a la derecha
Patrón método Template • Mecanismo de cómputo genérico que puede ser especializado redefiniendo ciertos pasos. • implementado por medio de una clase abstracta de Java con métodos que pueder ser redifinidos por sus subclases
Especializando el Recorrido Genérico para Arbol Binario • Imprimiendo una expresión aritmética public classPrintExpressionTraversal extends BinaryTreeTraversal { ... protected void external(Position p, TraversalResult r) { System.out.print(p.element()); } protected void left(Position p, TraversalResult r) { System.out.print("("); } protected void below(Position p, TraversalResult r) { System.out.print(p.element()); } protected void right(Position p, TraversalResult r) { System.out.print(")"); }
Estructura de Datos para Arboles Binarios mediante nodos enlazados
Representación de Arboles Generales árbol T Arbol binario T' representa T