Alberto León Aparicio Algoritmos y Estructuras de Datos Árboles ____________________________________________________________________________________________________________________ ÁRBOLES Los árboles representan las estructuras no lineales y dinámicas de datos más importantes en computación. Los árboles pueden ser construidos con estructuras estáticas y dinámicas. Las estáticas son arreglos, registros y conjuntos, mientras que las dinámicas están representadas por listas. Un árbol es una estructura jerárquica aplicada sobre una colección de elementos u objetos llamados nodos; uno de los cuales es conocido como raíz. Además se crea una relación o parentesco entre los nodos dando lugar a términos como padre, hijo, hermano, antecesor, sucesor, ancestro, etc. Existen diferentes formas de representación de un árbol, entre las más comunes se tienen las siguientes: Mediante círculos y flechas, Mediante paréntesis anidados, Mediante notación decimal de Dewey. Algunas veces se incluye entre los árboles el árbol nulo vacío, el cual, es un árbol sin nodos que se representa mediante la letra . Cualquier nodo del árbol podría tener un número arbitrario de nodos hijos, a esto se le conoce como un árbol general, como se muestra en la siguiente figura. Si se limita el número de nodos hijos para cada nodo del árbol, digamos a un número n > 2 (llamado la aridad del árbol), entonces el árbol de aridad n es llamado n-ario. La terminología que por lo regular se utiliza para el manejo de árboles es la siguiente: -HIJO. X es hijo de Y, sí y solo sí el nodo X es apuntado por Y. También se dice que X es descendiente directo de Y. -PADRE. X es padre de Y sí y solo sí el nodo X apunta a Y. También se dice que X es antecesor de Y. -HERMANO. Dos nodos serán hermanos si son descendientes directos de un mismo nodo. -HOJA. Se le llama hoja o terminal a aquellos nodos que no tienen ramificaciones. -NODO INTERIOR. Es un nodo que no es raíz ni terminal. -GRADO. Es el número de descendientes directos de un determinado nodo. -GRADO DEL ARBOL Es el máximo grado de todos los nodos del árbol. -NIVEL. Es el número de arcos que deben ser recorridos para llegar a un determinado nodo. Por definición la raíz tiene nivel 1. -ALTURA. Es el máximo número de niveles de todos los nodos del árbol. -PESO. Es el número de nodos del árbol sin contar la raíz. -LONGITUD DE CAMINO. Es el número de arcos que deben ser recorridos para llegar desde la raíz al nodo X. Por definición la raíz tiene longitud de camino 1, y sus descendientes directos longitud de camino 2 y así sucesivamente. ORDEN DE LOS NODOS. Generalmente los árboles de un nodo se ordenan de izquierda a derecha. Si no se toma en cuenta el orden de los nodos hijos, entonces se habla de un árbol no ordenado. ÁRBOLES BINARIOS Un árbol binario es un árbol de grado 2, en el que todo nodo del árbol tiene un subárbol binario izquierdo y derecho asociados. Árbol Binario Completo o Lleno: Es un árbol binario en el que todos sus nodos, excepto las hojas, tienen siempre dos hijos (el subárbol izquierdo y el derecho) no nulos. El número de nodos de un árbol completo se calcula por la fórmula: Número de nodos = 2h-1 (donde h es la altura) Alberto León Aparicio Algoritmos y Estructuras de Datos Árboles ____________________________________________________________________________________________________________________ Árbol Binario Completo de Altura o Profundidad H: Es un árbol Binario Completo en donde todas las hojas están en el nivel H. Esta es una de las pocas estructuras de árbol que se pueden representar eficientemente usando arreglos. Una expresión es una secuencia de componentes léxicos (tokens), que siguen reglas preescritas. Un token puede ser un operador o un operando. Un árbol binario de búsqueda es un árbol en el que todo nodo existente tiene un sólo elemento y cumplen lo siguiente: DE EXPRESION -Cada hoja es un operando. -El nodo raíz y los nodos internos son operadores. -Los subárboles son sub_expresiones en las que el nodo raíz es un operador. DE BUAQUEDA -Todas las claves del subárbol izquierdo son menores que la raíz. - Todas las claves del subárbol derecho son mayores que la raíz. -Los subárboles izquierdo y derecho son también árboles de búsqueda. ÁRBOLES BINARIOS Representación en memoria Hay dos formas tradicionales de representar un árbol binario en memoria: 1.-Por medio de datos tipo punteros también conocidos como variables dinámicas o listas. Esta es la forma más utilizada, puesto que es la más natural para tratar este tipo de estructuras. 2.-Por medio de arreglos. Los nodos del árbol binario serán representados como registros que contendrán como mínimo tres campos. En un campo se almacenará la información del nodo. Los dos restantes se utilizarán para apuntar al subárbol izquierdo y derecho del subárbol en cuestión. Clasificación de árboles binarios: Existen cuatro tipos de árbol binario: Alberto León Aparicio Algoritmos y Estructuras de Datos Árboles ____________________________________________________________________________________________________________________ DISTINTOS. Dos árboles binarios son distintos cuando sus estructuras son diferentes. SIMILARES. Dos árboles binarios son similares cuando sus estructuras son idénticas, pero la información que contienen sus nodos es diferente. ÁRBOLES BINARIOS EQUIVALENTES. Son aquellos árboles que son similares y que además los nodos contienen la misma información. COMPLETOS. Son aquellos árboles en los que todos sus nodos excepto los del último nivel, tiene dos hijos; el subárbol izquierdo y el subárbol derecho. Recorrer el subárbol izquierdo INORDEN Examinar la raíz Recorrer el subárbol derecho inorden RECORRIDO DE Examinar la raíz UN ARBOL PREORDEN Recorrer el subárbol izquierdo en preorden Recorrer el subárbol derecho en preorden Recorrer el subárbol izquierdo en postorden POSTORDEN Recorrer el subárbol derecho en postorden Examinar la raíz Además de estos recorridos tradicionales, se tienen los recorridos conversos, en los que el orden del recorrido se invierte a derecha- izquierda, en vez de izquierda – derecha. Finalmente existe un recorrida llamado nivel por nivel en el que los nodos del árbol se visitan por niveles a partir de cero y de izquierda a derecha. Árboles enhebrados Existe un tipo especial de árbol binario llamado enhebrado, el cual contiene hebras que pueden estar a la derecha o a la izquierda. ARBOL ENHEBRADO A LA DERECHA. Este tipo de árbol tiene un apuntador a la derecha que apunta a un nodo antecesor. ARBOL ENHEBRADO A LA IZQUIERDA. Estos árboles tienen un apuntador a la izquierda que apunta al nodo antecesor en orden. BOSQUE Entenderemos como bosque a un conjunto normalmente ordenado de dos o más árboles generales. Alberto León Aparicio Algoritmos y Estructuras de Datos Árboles ____________________________________________________________________________________________________________________ ÁRBOLES AVL Un árbol AVL es un árbol binario de búsqueda al que se le añade una condición de equilibrio. Esta condición es que para todo nodo la altura de sus subárboles izquierdo y derecho pueden diferir a lo sumo en 1. AVL son las iniciales de Adelson-Velskii y Landis, los hombres que idearon este tipo de árbol. Operaciones básicas en los árboles binarios. Inserción. La inserción de un elemento en un árbol AVL es idéntica que en un árbol binario de búsqueda, la diferencia se encuentra en la comprobación que hay que realizar posteriormente en los árboles AVL. En un árbol AVL tras realizar la inserción hay que comprobar que se sigue manteniendo la condición de equilibrio, o lo que es lo mismo, que la altura del subárbol izquierdo y la del subárbol derecho difieran en una unidad o sean iguales. Si se produce un desequilibrio hay que reequilibrar la estructura para que siga siendo un árbol AVL. Borrar. El procedimiento de borrado es el mismo que en el caso de arbol binario de busqueda. La diferencia se encuentra en el proceso de reequilibrado posterior. Este proceso es idéntico al que se realiza en la inserción, la única diferencia es que en la inserción tras realizar una rotación el árbol ya estaba equilibrado, mientras que en el borrado puede ser necesario realizar mas de una rotación. Rotación Simple REEQUILIBRIO DE LOS ÁRBOLES AVL Rotación doble Las operaciones adicionales en un árbol AVl son análogas a las de árboles de busque da binarios. Los árboles AVL son un subconjunto de los árboles de busque da binarios, por lo que sus aplicaciones son muy similares. ÁRBOLES B Los árboles reciben su nombre de R. Bayer, contienen entre n y 2n nodos, siendo n una constante dada. Como consecuencia de esto se puede deducir que los árboles B no son árboles binarios como sí lo son los binarios de búsqueda o los AVL. En los árboles B los nodos se agrupan dentro de páginas, por lo que se podría definir a la página como un conjunto de nodos. Los árboles B deben cumplir las siguientes características en cuanto a estructura: 1. Todas las hojas en el árbol están al mismo nivel. 2. Cada nodo contiene entre n y 2n elementos, excepto la raíz que tiene entre 1 y 2n. 3. Si en nodo tiene m elementos, en nodo contendrá 0 ó m+1 hijos. 4. Los elementos de un nodo del árbol están ordenados linealmente en el nodo. 5. Los elementos del árbol B están organizados siguiendo las propiedades de un ABB, es decir, los elementos menores a la izquierda y los mayores a la derecha del nodo original. Alberto León Aparicio Algoritmos y Estructuras de Datos Árboles ____________________________________________________________________________________________________________________ Operaciones básicas en los árboles B Insertar. La primera acción a realizar en la operación de inserción es localizar el lugar adecuado en el árbol donde se insertará el nuevo elemento. Una vez localizado el lugar adecuado, hay que tener en cuenta el número de nodos que tiene la página destino del nuevo elemento. Si tiene menos de 2n, entonces se inserta el nuevo nodo y se da por finalizada la operación de inserción. La complejidad se produce cuando la página destino está al completo de su capacidad, es decir, tiene 2n nodos. En estos casos el procedimiento a seguir es el siguiente: 1. Insertar el nodo como si realmente tuviese sitio libre. 2. Extraer el nodo que ocupa la posición del medio e insertarlo en la página padre. Si no hubiese página padre se crearía una nueva página con ese nodo. 3. Dividir la página original en dos nuevas páginas, cada una de ellas con n elementos. Estas páginas serán los hijos derechos e izquierdos del nodo que promocionó a la página superior. 4. Si la página a la que promociona el nodo mediano también se encuentra completa, se repetiría la misma operación de división y promoción. Como consecuencia de que todas las hojas deben estar en el último nivel, los árboles B crecen hacia arriba (este crecimiento se produce cuando la inserción de un nodo en una página completa provoca su división) y la ausencia de la restricción de 2 hijos por nodo que tienen los binarios son características que los diferencia del resto de árboles. Los árboles B tienen un campo de aplicación similar a los árboles binarios de búsqueda, ya que también son árboles de búsqueda. Borrar. a).-Cuando el nodo que contiene el elemento por eliminar posee más del mínimo de elementos, se elimina el elemento del nodo y el proceso de eliminación termina. b).-Cuando el nodo que contiene el elemento a eliminar posee exactamente el mínimo de elementos se buscara otro elemento que pueda sustituir al que se dará de baja y si no existe un sustituto se deberá unir dos nodos. Cuando alguno de los hermanos adyacentes al nodo que se dará de baja tiene más del mínimo de elementos, el elemento padre del nodo con el elemento por borrar lo sustituirá cuando sea borrado. Si no existe un hermano adyacente con mas del mínimo de elementos el nodo donde ocurre la eliminación y un hermano adyacente se unen junto con el elemento padre que desaparece del nodo padre, si este ultimo queda con mas del mínimo de elementos el proceso termina, sino, se analiza la eliminación en el nodo padre repitiendo los pasos anteriormente mencionados. c).-Si el nodo que contiene el elemento por eliminar es la raíz del árbol y posee un solo elemento el nodo desaparece y la nueva raíz del árbol será el nodo resultado de la unión de los hijos que dependían de la raíz anterior. Como en el caso de los árboles binarios las operaciones secundarias más usuales son las búsquedas y los recorridos. Estos algoritmos son semejantes a los utilizados para los árboles binarios