Árboles Estructura de Datos 1 Los árboles son estructuras dinámicas no lineales, hasta ahora solo se han manejado estructuras estáticas y dinámicas lineales, es decir a cada elemento de la estructura solo le sigue otro, en el caso de los árboles a estos les puede seguir uno o mas elementos, es decir que un elemento de la estructura puede apuntar a varios, además de esto son dinámicos ya que se pueden crear elementos que conformen el árbol cuando se requiera y en cualquier parte del programa. Estructuras estáticas Estructuras dinámicas Arreglos Listas Pilas Árboles Colas Estructuras lineales Estructuras no lineales Arreglos Árboles Pilas Árboles Colas Listas Árboles generales Existen diferentes tipos de árboles cada uno de ellos con diferentes características, pero en general un árbol se define de la siguiente manera: Estructura jerárquica dinámica, homogénea y no lineal formada por un conjunto de elementos conocidos como nodos, en los cuales el primer nodo que se crea se conoce como nodo raíz y de este se derivan los demás. Cuando no existe ningún nodo en el árbol se dice que se tiene un árbol vacío. Cada nodo que se deriva del nodo raíz o de otro nodo se puede manejar cono un árbol, en base a esto dentro del árbol se manejan términos como predecesor, descendiente , hijo, padre, ancestro, etc. 1 Árboles Estructura de Datos 1 Representación de árboles. Esta se puede dar de diferentes formas la mas utilizada es la representación por medio de grafos. Términos utilizados con árboles. a) Todo árbol que no es vacío tiene un nodo raíz b) Todo nodo x desciende directo de un nodo y se conoce como hijo de y. c) Todo nodo y de cual desciende un nodo x se conoce como padre de x. d) El grado de un nodo se determina por el numero de descendientes que este tenga. e) El grado de un árbol se determina por el nodo de mayor grado. f) Todo nodo que no tenga hijos se le conoce como nodo terminal de hoja. g) Todo nodo que no es raíz o terminal se le conoce como nodo interno. h) El nivel de un nodo se determina por el numero de arcos que se recorren para llegar a el. La raíz tiene nivel 1. i) La altura de un árbol se determina por el nodo de mayor nivel. j) Todos los nodos descendientes del mismo padre se conocen como hermanos. k) Peso es el numero de nodos del árbol sin contar la raíz l) Longitud del camino es el numero 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. 2 Árboles Estructura de Datos 1 Árboles Binarios Un árbol binario, es aquel que tiene como máximo 2 descendientes, es decir cada uno de los nodos del árbol tiene un máximo de 2 hijos; además si es binario de búsqueda se define de manera formal como: “Para todo nodo T del árbol debe cumplirse que todos los valores de los nodos del subárbol izquierdo de T serán menores o iguales al valor del nodo T. De forma similar, todos los valores de los nodos del subárbol derecho de T deben ser mayores o iguales al valor del nodo T ”. Por lo mismo se pueden realizar las operaciones de búsqueda, inserción y eliminación, de manera más eficiente en este tipo de árbol. Por ejemplo si tenemos los siguientes valores para insertar en un árbol binario de búsqueda: 34-10-56-82--46-25 El árbol quedaría con la siguiente estructura: 3 Árboles Estructura de Datos 1 INSERCCIÓN EN UN ÁRBOL BINARIO DE BÚSQUEDA: 1. Debe compararse la clave a insertar con la raíz del árbol. Si es mayor, debe avanzarse hacia el subárbol derecho. Si es menor, debe avanzarse hacía el subárbol izquierdo. 2. Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientes condiciones: 1. El subárbol derecho es igual a vacío, o el subárbol izquierdo es igual a vacío, en cuyo caso se procede a insertar el elemento en el lugar que le corresponde. 2. La clave que quiere insertarse es igual a la raíz del árbol, en cuyo caso no se realiza la inserción. BÚSQUEDA En el caso de la búsqueda es este tipo de árbol, por lógica, será moviéndose en el árbol, dependiendo si el elemento a buscar es mayor o menor que la raíz, hasta que se encuentre o se determine que no esta en el árbol. Por ejemplo si del árbol formado anteriormente buscamos el valor 46 Compararíamos el 46 con el 34 que es la raíz, como 46 es mayor nos moveríamos al subárbol derecho. Ahora nuestra raíz es 56, comparamos 46 con 56 y vemos que es menor que este, por lo que nos movemos hacía el subárbol izquierdo. De esta forma encontramos que 46 se encuentra en el árbol. 4 Árboles Estructura de Datos 1 RECORRIDOS EN ÁRBOLES. Los recorridos que se pueden hacer en los árboles binarios de búsqueda, son los mismo que en los árboles en general: Recorrido Preorden: Visita la raíz Subárbol izquierdo Subárbol derecho Recorrido Inorden: Subárbol izquierdo Visita la raíz Subárbol derecho Recorrido Postorden: Subárbol izquierdo Subárbol derecho Visita la raíz Por ejemplo si hacen los recorridos de este árbol: Recorrido Preorden: 34,10,25,56,46,82 Recorrido Inorden: 10,25,34,46,56,82 Recorrido Postorden: 25,10,46,82,56,34 5 Árboles Estructura de Datos 1 BORRADO EN UN ÁRBOL BINARIO DE BÚSQUEDA La operación de borrado es un poco más complicada que la de inserción. 1. Si el elemento a borrar es terminal u hoja, simplemente se suprime. Por ejemplo, si quiere eliminar 25 del árbol El árbol quedaría: 6 Árboles Estructura de Datos 1 2.- Si el elemento a eliminar tiene un solo descendiente, entonces tiene que sustituirse por ese descendiente. Por ejemplo si ahora quiere borrar el 34 El árbol quedaría: 7 Árboles Estructura de Datos 1 3.- Si el elemento a borrar tiene dos descendientes, entonces se tiene que sustituir por el nodo que se encuentra más a la derecha del subárbol izquierdo o por el nodo que se encuentra más a la izquierda del subárbol derecho. Por ejemplo si ahora quiero eliminar el 56 : El árbol quedaría: Antes de hacer la eliminación, tenemos que buscar el elemento. 8