ARBOLES Ing. Betty Suárez Torres COMPETENCIA Construye aplicaciones informáticas eficientes con estructuras de datos estáticas y dinámicas; innovando en la búsqueda de soluciones con iniciativa, creatividad y responsabilidad. DEFINICIÓN Los árboles son estructuras no lineales y homogéneas en el que cada elemento puede tener varios elementos posteriores, pero tan sólo un elemento anterior. Los árboles son TDA’s adecuados para el tratamiento de grandes cantidades de información. Los árboles son muy utilizados en informática para representar fórmulas algebraicas como un método eficiente para búsquedas grandes y complejas, listas dinámicas y aplicaciones diversas tales como inteligencia artificial o algoritmos de cifrado, asimismo para el diseño de compiladores, procesamiento de texto y algoritmos de búsqueda. ELEMENTOS Nodo padre: Nodo que apunta a dos nodos hijos. En un árbol cada nodo sólo puede tener un padre. Nodo hijo: Es cualquier nodo apuntado por el nodo padre, un nodo puede tener varios hijos pero en los árboles binarios sólo puede tener dos. Nodo raíz: Es el único nodo que no tiene padre y es el que define el lugar de los demás nodos o información almacenada. Hojas: Son todos los nodos que no tienen hijos y apuntan a null. ELEMENTOS … Nodos interiores: Son todos aquellos nodos que no son ni el nodo raíz ni los nodos hojas. Un subárbol de un árbol: Es un nodo junto con todos sus descendientes. Camino: Es una secuencia de nodos que sirve para llegar a un dato en el árbol. Rama: Es un camino que comprende desde la raíz y cualquiera de las hojas. Altura: Es el máximo número de nodos de las ramas del árbol, es decir, el máximo número de nodos que hay que recorrer para llegar a una hoja desde la raíz. ELEMENTOS Nodo padre Nivel 0 Raíz Nivel 1 NP NP Nivel 1 H Nodo izquierdo Números < padre H NP Nodo derecho Números < padre H Nivel 0 TIPOS DE ÁRBOLES • Árboles perfectamente balanceados: Son árboles en los que para cada nodo el número de nodos en sus subárboles derecho e izquierdo difieren como máximo en uno. • Un árbol binario (AB): Es un árbol en el que ningún nodo puede tener más de dos subárboles. En un árbol binario cada nodo puede tener, cero, uno o dos hijos (subárboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho. ÁRBOLES BINARIOS DE BÚSQUEDA (ABB) • Los árboles binarios de búsqueda son un tipo especial de árboles binarios, en donde los valores contenidos en el subárbol izquierdo de cualquiera de sus nodos son menores al valor de la raíz; y que todos los nodos que se encuentran en su subárbol derecho contienen valores mayores que el contenido de la raíz. • Los valores duplicados son rechazados. OPERACIONES EN ABB 1. Inserción de nodos: Las inserciones de nodos sólo pueden hacerse como hojas, nunca como nodos interiores, pudiendo insertarse un nodo como raíz únicamente cuando el árbol esté vacío. Procedimiento: a. Al insertar el nodo se debe determinar si se coloca como raíz o como hijo de algún nodo del árbol. b. Utilizar una función recursiva que en base a algún criterio, determinará el lugar donde será ubicado el nuevo nodo (recorrido). OPERACIONES EN ABB ... 2. Recorrido: Para visualizar o consultar los datos almacenados en un árbol se necesita recorrer el árbol o visitar los nodos del mismo. Al contrario que las listas enlazadas, los árboles binarios no tienen realmente un primer valor, un segundo valor, tercer valor, etc. La designación tradicional de los recorridos utiliza un nombre para el nodo raíz (N), para el subárbol izquierdo (I) y para el subárbol derecho (D): o Preorden (nodo-izquierdo-derecho) (NID) o Enorden (izquierdo-nodo-derecho) (IND) o Postorden (izquierdo-derecho-nodo) (IDN) EJEMPLO DE RECORRIDO EN ABB - I 1. • • • Recorrido en pre-orden Visitar la raíz Recorrer el subárbol izquierdo en pre-orden Recorrer el subárbol derecho en pre-orden + ÁRBOL 1: c * d + e Pre-orden: + * cde * c e d EJEMPLO DE RECORRIDO EN ABB - I 2. • • • Recorrido en-orden Recorrer el subárbol izquierdo en in-orden Visitar la raíz Recorrer el subárbol derecho en in-orden + ÁRBOL 1: c * d + e In-orden: c * d + e * c e d EJEMPLO DE RECORRIDO EN ABB - I 3. • • • Recorrido post-orden Recorrer el subárbol izquierdo en in-orden Recorrer el subárbol derecho en in-orden Visitar la raíz + ÁRBOL 1: c * d + e Post-orden: cd * e + * c e d EJEMPLO DE RECORRIDO EN ABB - II 1. Recorrido en Pre-orden: mebadlpnvtz 2. Recorrido en In-orden abdelmnptvz 3. Recorrido en Post-orden adblentzvpm M E P ÁRBOL 2 B A L D N V T Z EJEMPLO DE RECORRIDO EN ABB - III 1. Recorrido en Pre-orden: / + * + ab / cd ^ efg 2. Recorrido en In-orden a+b*c/d+e^f/g 3. Recorrido en Post-orden ab + cd / * ef ^ + g / / + g ^ * ÁRBOL 3 + a / b c e d f EJEMPLO DE RECORRIDO EN ABB - IV 1. Recorrido en Pre-orden: 7, 3, 1, 5, 6, 8, 9 2. Recorrido en In-orden 1, 3, 5, 6, 7, 8, 9 3. Recorrido en Post-orden 1, 6, 5, 3, 9, 8, 7 7 3 ÁRBOL 4: 1 8 5 9 7, 3, 1, 5, 6, 8, 9 6 PREGUNTAS?