Title: Arboles (Trees)
1Arboles (Trees)
- Arboles
- Arboles binarios
- Recorridos de árboles
- Patrón método template
- Estructuras de datos para árboles
2Arboles
- un árbol representa una jeraquía
- ejemplos
- estructura organizativa de una empresa
tabla de contenido de un libro
3Arboles (1)
- Sistema de ficheros de Unix o DOS/Windows
4Arboles (2)
- Representación
- Conjuntos anidados
- Paréntesis anidados
- Indentación
- Grafo
- Representación más usual grafo
5Terminologí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
6Arboles 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)
7Ejemplos de Arboles Binarios
8Ejemplos de Arboles Binarios
9Propiedades 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
10TDAs 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
11TDAs 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
12Recorrido de árboles (1)
- recorrido preorder
- Algoritmo preOrder(v)
- visitar nodo v
- for each hijo w de v do
- realizar recursivamente preOrder(w)
- Ejm lectura de un documento desde el inicio
hasta el final
13Recorrido de árboles (2)
- recorrido postorder
- Algoritmo postOrder(v)
- for each hijo w de v do
- realizar recursivamente postOrder(w)
- visitar nodo v
- comando du (disk usage) de Unix
14Evaluación de Expresiones Aritméticas
- especialización de recorrido postorder
Algoritmo evaluateExpression(v) if v es un nodo
externo return la variable almacenada en
v else asignar a o el operador almacenado en
v x ? evaluateExpression(leftChild(v)) y ?
evaluateExpression(rightChild(v)) return x o y
15Recorrido de árboles (3)
- recorrido inorder de un árbol binario
Algoritmo inOrder(v) realizar recursivamente
inOrder(leftChild(v)) visitar nodo v
realizar recursivamente inOrder(rightChild(v))
- 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
16Recorrido 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
17Recorrido 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
18Patró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
19Especializando el Recorrido Genérico para Arbol
Binario
- Imprimiendo una expresión aritmética
public class PrintExpressionTraversal 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(")")
20Estructura de Datos para Arboles Binarios
mediante nodos enlazados
21Representación de Arboles Generales
árbol T
Arbol binario T' representa T