Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Universidad Nacional del Sur Árboles Binarios Ricardo Coppo rcoppo@uns.edu.ar Definición conceptual de árbol binario Un árbol binario es una estructura de información compuesta por colección o conjunto de nodos y arcos que forman una estructura jerárquica Posee una raíz de la cual dependen a lo sumo 2 subárboles no vacíos Cada subárbol posee una arista única que lo une con la raíz. Los nodos que no poseen subárboles dependientes se denominan “hojas” del árbol. Arboles Binarios Ricardo Coppo 2 Principios de Computadoras II Universidad Nacional del Sur Ejemplo gráfico Raíz La raíz puede estar vacía Existe una relación de “paternidad” Subárbol derecho Subárbol izquierdo Arboles Binarios Ricardo Coppo 3 Principios de Computadoras II Universidad Nacional del Sur Definición recursiva Formalmente un árbol binario se puede definir de manera recursiva como sigue: Una estructura vacía es un árbol (árbol vacío) Sean A1 y A2 árboles disjuntos con raíces r1 y r2 respectivamente. Entonces, la estructura formada con un nodo r, que posee como hijos a A1 y A2 también es un árbol Arboles Binarios Ricardo Coppo 4 Principios de Computadoras II Universidad Nacional del Sur Ejemplo A2 A1 Arboles Binarios Ricardo Coppo 5 Principios de Computadoras II Universidad Nacional del Sur Ejemplo A2 A1 A11 Arboles Binarios Ricardo Coppo A21 A12 6 A22 Principios de Computadoras II Universidad Nacional del Sur Ejemplo A2 A1 A11 Arboles Binarios Ricardo Coppo A21 A12 7 A22 Principios de Computadoras II Universidad Nacional del Sur Definiciones Un “camino” entre un nodo n1 y nk se define como una secuencia de nodos n1, n2, …, nk tal que ni es el padre de ni+1 para 1<i<k La “longitud” de un camino es la cantidad de aristas que lo conforman (igual a la cantidad de nodos – 1) Un “camino de longitud 0” es una que nace y termina en el mismo nodo. Arboles Binarios Ricardo Coppo 8 Principios de Computadoras II Universidad Nacional del Sur Definiciones Si hay un camino del nodo u al nodo v, entonces v es “descendiente” de u. Si además u ≠ v entonces v es “descendiente propio” de u. De forma similar se puede definir “ascendiente” y “ascendiente propio” Arboles Binarios Ricardo Coppo 9 Principios de Computadoras II Universidad Nacional del Sur Definiciones Un nodo que no tiene hijos es una “hoja” del árbol Dos nodos que tienen al mismo padre son “hermanos” Se pueden definir otras relaciones de parentesco como “tíos”, “abuelos”, etc. Arboles Binarios Ricardo Coppo 10 Principios de Computadoras II Universidad Nacional del Sur Definiciones Para cualquier nodo ni, la “profundidad” de ni es la longitud del camino desde la raíz hasta ni La “altura” de ni está dado por el camino más largo del nodo ni hasta una hoja (las hojas son de altura 0) La “altura” de un árbol es la altura de la raíz Arboles Binarios Ricardo Coppo 11 Principios de Computadoras II Universidad Nacional del Sur Propiedades especiales La cantidad máxima de hojas que puede tener un árbol binario depende de la altura del mismo Altura 0 (árbol vacío) Altura 1 (raíz solo) Altura 2 Altura 3 Hojasmax = 0 Hojasmax = 21-1 = 1 Hojasmax = 22-1 = 2 Hojasmax = 23-1 = 4 Altura h Hojasmax = 2h-1 En un árbol general no se puede calcular este valor Arboles Binarios Ricardo Coppo 12 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario (Implementación) Descripción del nodo del árbol Arboles Binarios Ricardo Coppo 13 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario (Implementación) Descripción del nodo del árbol Arboles Binarios Ricardo Coppo 14 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario (Implementación) La clase principal Arboles Binarios Ricardo Coppo 15 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario (Implementación) La clase principal Arboles Binarios Ricardo Coppo 16 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario (Implementación) La clase principal Arboles Binarios Ricardo Coppo 17 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario (prueba) Arboles Binarios Ricardo Coppo 18 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda (Binary Search Tree – BST) Un árbol binario de búsqueda es un árbol binario que además presenta las siguientes propiedades: Los valores o nodos contienen elementos que pueden ser ordenados de alguna manera (enteros, cadenas de caracteres, u otro orden definido por el programador). Para cada nodo del árbol que almacena un elemento v, todos los elementos x<v se almacenan en su subárbol izquierdo mientras que todos los valores x>v se encuentran el en subárbol derecho. En principio se evita el almacenamiento de valores duplicados en este tipo de árbol. Arboles Binarios Ricardo Coppo 19 Principios de Computadoras II Universidad Nacional del Sur Arboles binarios de búsqueda 45 K A P N 99 35 22 R 37 En este tipo de árbol se evita almacenar valores repetidos. Arboles Binarios Ricardo Coppo 20 Principios de Computadoras II Universidad Nacional del Sur Árboles Binarios de Búsqueda Si el árbol se encuentra balanceado, los algoritmos de búsqueda son muy eficientes O(log n). Los algoritmos de determinación del mínimo y máximo elemento almacenado también son muy eficientes. En el peor caso se comporta como una lista enlazada Recorrer siempre a la derecha o a la izquierda hasta encontrar una hoja Debido a la velocidad de la búsqueda se puede definir un método “contiene(x)” o “pertenece(x)” que dado un valor x, determina si se encuentra o no en el árbol. Arboles Binarios Ricardo Coppo 21 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda Arboles Binarios Ricardo Coppo 22 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda Implementación Arboles Binarios Ricardo Coppo 23 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda Implementación Arboles Binarios Ricardo Coppo 24 Principios de Computadoras II Universidad Nacional del Sur Implementación Arboles Binarios Ricardo Coppo 25 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda Arboles Binarios Ricardo Coppo 26 Principios de Computadoras II Universidad Nacional del Sur Implementación Arboles Binarios Ricardo Coppo 27 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Busqueda: Eliminación Eliminar una hoja del árbol Arboles Binarios Ricardo Coppo 28 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda: Eliminación Eliminar un nodo con un solo hijo Arboles Binarios Ricardo Coppo 29 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda: Eliminación Eliminar un nodo con un solo hijo Arboles Binarios Ricardo Coppo 30 Principios de Computadoras II Universidad Nacional del Sur Árbol Binario de Búsqueda: Eliminación Eliminar un nodo con un solo hijo Arboles Binarios Ricardo Coppo 31 Principios de Computadoras II Universidad Nacional del Sur Implementación ! ! R A S I V Sigue… Arboles Binarios Ricardo Coppo E R 32 Principios de Computadoras II Universidad Nacional del Sur Implementación Sigue… Arboles Binarios Ricardo Coppo 33 Principios de Computadoras II Universidad Nacional del Sur Árbol de Búsqueda Binaria Eliminación Arboles Binarios Ricardo Coppo 34 Principios de Computadoras II Universidad Nacional del Sur Programa principal Arboles Binarios Ricardo Coppo 35 Principios de Computadoras II Universidad Nacional del Sur Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Universidad Nacional del Sur Árboles Binarios Ing. Ricardo Coppo rcoppo@uns.edu.ar