Árboles Notas de Clase Prof. Juan Andrés Colmenares, M.Sc. Instituto de Cálculo Aplicado Facultad de Ingeniería Universidad del Zulia 21 de febrero de 2004 Índice 1. Definición 1 2. Términos Básicos 2 2.1. Árbol Ordenado......................... 2 2.2. Nivel de un Nodo......................... 3 2.3. Altura de un Árbol........................ 3 2.4. Longitud de Camino (Interno) de un Árbol.......... 3 2.5. Profundidad de un Nodo..................... 3 3. Árbol Binario 3 3.1. Árbol Multicamino........................ 3 3.2. Definición de Árbol Binario................... 3 3.2.1. Árbol Binario Vacío, Lleno y Completo........ 4 4. Propiedades de los Árboles 4 5. Recorrido de Árboles 5 1. Definición Es la estructura de datos no lineal más importante de la ciencia de la computación. Formalmente, un árbol se define como un conjunto no vacio y finito T de uno o más nodos enalazados a través de aristas que: 1
1. contiene un nodo especial denominado la raíz del árbol. 2. los nodos restantes (excluyendo a la raíz) están particionados en m 0 conjuntos disjuntos T 1, T 2,..., T m, y cada uno de estos conjuntos es un árbol. Los árboles T 1, T 2,..., T m se dice que son sub-árboles de la raíz. Nótese que la definición anterior es recursiva, lo cual evidencia que la recursión está intimamente relacionada con los árboles. Un vértice o nodo es un objeto simple que usualmente contiene información. Una arista es una conexión entre 2 vértices. Un camino en un árbol es una lista de vértices distintos enlazados por aristas. La propiedad fundamental de un árbol es que existe sólo un camino entre la raíz y cualquier otro nodo del árbol. En caso contrario, si hay más de un camino se habla de Grafos. 2. Términos Básicos Cada nodo (excepto la raíz) tiene exactamente un nodo inmediatamente encima de él (padre). Los nodos que tiene un nodo inmediatamente debajo se denominan hijos. Se puede hablar de hermanos ( siblings ), abuelos, bisabuelos; en general de ancestros y descendientes. A los nodos sin hijos se les denomina hojas o nodos terminales. Los nodos con al menos un hijo se denominan nodos no terminales. Un bosque es un conjunto (usualmente ordenado) de cero o más árboles disjuntos. Si eliminamos la raíz de un árbol entonces tenemos un bosque; inversamente si a un bosque le agregamos un nodo raíz obtenemos un árbol. Nótese que cualquier nodo es la raíz de un subárbol constituido por él mismo y los nodos situados debajo. 2.1. Árbol Ordenado Si el órden relativo de los subárboles de un árbol es importante se habla de un árbol ordenado. Un árbol ordenado es aquél en el que se ha especificado 2
el orden de los hijos de todos los nodos (e.g. el orden en el que se dibujan los nodos). En computación surgen naturalmente árboles ordenados, por lo tanto se asumirá que los árboles son ordenados, a menos que se especifique lo contrario. 2.2. Nivel de un Nodo El nivel de un nodo es el número de nodos que hay en el camino desde éste hasta la raíz (sin incluirse a sí mismo). 2.3. Altura de un Árbol Es el nivel máximo del árbol o la distancia máxima entre la raíz y cualquier nodo. 2.4. Longitud de Camino (Interno) de un Árbol La Longitud de Camino Interno (LCI) de un árbol es la suma de los niveles de todos los nodos. 2.5. Profundidad de un Nodo Es la longitud entre la raíz y el nodo. 3. Árbol Binario 3.1. Árbol Multicamino Un árbol multicamino es un árbol ordenado cuyos nodos deben tener un número específico de hijos. En este tipo de árbol conviene definir nodos externos especiales que no tienen hijos, y normalmente no tienen ni nombre ni información asociada. Los nodos externos actúan como nodos ficticios para los nodos que no tienen el número de hijos especificados. Un ejemplo de árboles multicamino son los árboles binarios. 3.2. Definición de Árbol Binario Es un árbol ordenado que está formado por dos tipos de nodos: 1. externos (sin hijos) 3
2. internos que tienen exactamente dos (2) hijos, uno izquierdo y otro derecho (especificación del orden). Donald Knuth define un árbol binario como: Un conjunto finito de nodos que está vacío o consiste de una raíz y de elementos de dos árboles binarios disjuntos que son llamados subárboles derecho e izquierdo de la raíz. Nótese que para Knuth el concepto de árbol binario es diferente al de un árbol ordinario, en especial porque un árbol binario puede estar vacio (es decir sólo tener un nodo externo). 3.2.1. Árbol Binario Vacío, Lleno y Completo Un árbol binario vacío contiene un nodo externo y ninguno interno. Un árbol binario lleno es aquél en el que los nodos internos llenan todos los niveles, con la posible excepción del último. Un árbol binario completo es un árbol binario lleno en el que los nodos internos del último nivel aparecen todos a la izquierda de los nodos externos de ese mismo nivel. 4. Propiedades de los Árboles 1. Dados dos nodos cualesquiera de un árbol, existe exactamente un camino que los conecta. 2. Un árbol con N nodos tiene N-1 aristas. 3. Un árbol binario con N nodos internos tiene N+1 nodos externos. 4. La altura de un árbol binario lleno 1 con n nodos internos es aproximadamente log 2 (n). 5. En general, la altura promedio de un árbol binario es O( N), pero puede llegar a ser N 1. 1 Los árboles binario llenos son importantes porque garantizan que su altura será baja, de forma tal que no costará mucho trabajo ir de la raíz a cualquier nodo. 4
5. Recorrido de Árboles Una vez construido un árbol se necesita saber cómo recorrerlo, es decir como visitar sistemáticamente todos los nodos. La siguiente tabla resume la forma de recorrido de árboles binarios: Orden Previo (pre-orden) Orden Simétrico (en orden) Orden Posterior (post-orden) 1.Raíz. 1.Subárbol izquierdo. 1.Subárbol izquierdo. 2.Subárbol izquierdo. 2.Raíz. 2.Subárbol derecho. 3.Subárbol derecho. 3.Subárbol derecho. 3.La raíz. Adicionalmente existe el recorrido por niveles (u orden de nivel), el cual consiste en visitar los nodos según van apareciendo en la página, leyendo de arriba a abajo. Para árboles ordinarios tenemos los siguientes recorridos: Orden Previo (pre-orden) Orden Posterior (post-orden) 1.Raíz del primer árbol. 1.Subárboles del primer árbol. 2.Subárboles del primer árbol. 2.Raíz del primer árbol. 3.Subárboles restantes. 3.Subárboles restantes. El recorrido por niveles es similar al descrito anteriormente. Nótese que: PreOrden(Arbol) = PreOrden(ArbolBinario(Arbol)). PostOrden(Arbol) = EnOrden(ArbolBinario(Arbol)). 5