Árboles (Trees) Árboles Árboles binarios Recorridos de árboles Estructuras de datos para árboles
Árboles Un árbol representa una jeraquía ejemplos: estructura organizativa de una empresa tabla de contenido de un libro
Árboles (1) Sistema de ficheros de Unix o DOS/Windows
Árboles (2) Representación: Conjuntos anidados Paréntesis anidados (A ( B (D ( I ), E, F (J, K ) ), C (G. H ( L ) ) ) ) Indentación Grafo Representación más usual: grafo
Árboles (3)
Ejemplo A es el nodo raíz B es el padre de D y E C es el hermano de B D y E son los hijos de B D, E, F, G, I son nodos externos o hojas (No tienen hijos) 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 (número de descendientes directos) El grado del árbol es 3 (máximo grado de todos los nodos) Propiedad: (#aristas) = (#nodos) - 1
Árboles binarios Árbol ordenado: el hijo de cada nodo está en un cierto orden Árbol 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 Árboles Binarios expresión aritmética río especial
Ejemplos de Árboles Binarios Árboles de decisión
Árboles binarios distintos Dos árboles binarios son distintos cuando sus estructuras son diferentes. Ej.
Árboles binarios similares Dos árboles binarios son similares cuando sus estructuras son idénticas, pero la información que contienen sus nodos difieren entre sí.
Árboles binarios equivalentes Dos árboles binarios equivalentes se definen como aquellos que son similares y además los nodos contienen la misma información.
Árboles binarios completos Se define un árbol binario completo como un árbol en el que todos sus nodos, excepto los de último nivel, tienen dos hijos; el subárbol izquierdo y el subárbol derecho
Recorrido 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
Recorrido 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
Evaluació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
Recorrido 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
Recorrido de árboles (4) 1 2 3 4 5 6 7 8 9 10 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
Representación de árboles binarios en memoria
Representación de árboles binarios en memoria
Estructura de Datos para Arboles Binarios mediante nodos enlazados