Árboles: Implementación mediante arreglos: A B E <T>datos E B A G J I C D F H D C F G H J I int padres 1 2 -1 7 7 7 2 2 1 7 Porque A no tiene padre, es la raíz. En el primer vector se almacenan los datos del árbol, en el segundo vector se guarda el número en el que esta su padre en el primer vector. A continuación se dibuja la estructura de este árbol: A null B E null Es null porque no tiene hermanos. C null null F null null D null G null H null I null J null Es null porque no tiene hijos. Sub- clasificación de Árboles: Árboles binarios: Los árboles binarios son árboles en los cuales cada nodo puede tener un máximo de dos hijos. Aplicaciones: Evaluación de expresiones aritméticas, búsqueda y ordenamiento, etc. Terminología: Incluye la terminología de los árboles generales, además de una clasificación qque indica su inclinación. Sub- árbol izquierdo. Sub- árbol derecho. D A No es un árbol binario C Siguiendo con la terminología de Árboles, se definen a continuación las características de los árboles binarios: - Lleno: Todos los niveles del Árbol tienen el máximo de nodos. Son 2ℎ − 1 . Degenerado: Todos los nodos (excepto las hojas) tienen un solo hijo. Completo: Todos los nodos tienen el máximo de hijos posibles (dos), menos las hojas. Balanceado: Para todos los nodos la diferencia entre la altura de su subárbol izquierdo y la altura de su subárbol derecho es menor a 2. Definamos las características de los siguientes 4 árboles binarios: A B C D Árboles Completo Lleno Degenerado Balanceado Implementación A X X B X X X C D X X X X Árbol binario: A C B D E F Vectores <T> datos D B A C E F int izq -1 0 1 4 1 -1 int der -1 -1 3 5 -1 -1 Vemos en la implementación mediante vectores, en la cual se definen tres vectores: uno llamado datos (datos de cada nodo), en la cual se guardan datos de tipo genérico; uno llamado izq, en el cual se guarda la respectiva posición en el vector datos del hijo que está a su izquierda en el árbol (para B es cero porque su hijo a la izquierda es D); otro llamado der, en el cual se almacenan las posiciones en el vector datos de los hijos que están a la derecha en el árbol (para B es -1 porque no tiene hijos a la derecha). La estructura de un nodo de árbol binario tiene la siguiente estructura, en la cual se guarda un dato, la dirección del hijo a la izquierda y la dirección del hijo a la derecha. En caso de no tener hijos a la izquierda o a la derecha se indicará como “null” (vacío) con un “slash” (/). Dato Izq der Utilizando como ejemplo el árbol anterior, lo obtendríamos en esta estructura así: A B D C E F El código en el cual se almacena la lógica para crear estos nodos es el siguiente, en dicha clase aparecen los constructores, modificadores y analizadores necesarios. Public class NodoArbolBin <T>{ Private T dato; Private NodoArbolBin izq; Private NodoArbolBin der; Public NodoArbolBin(T dato){ This.dato=dato; Izq=der=null; } Public void setIzq(NodoArbolBin izq){ This.izq=izq; } Public NodoArbolBin getIzq(){ Return izq; } Public void setDer(NodoArbolBin der){ This.der=der; } Public NodoArbolBin getDer(){ Return der; } } Para dar un ejemplo de cómo funciona se crea un main, en el cual se creará el nodo con el dato A y se le agregarán como hijos a la izquierda un nodo B, y a la derecha un nodo C. Public class principal{ Public static void main (String[]arg){ NodoArbolBin raíz; raiz=new NodoArbolBin(“A”); raiz.setIzq(new NodoArbolBin(“B”)); raiz.setDer(new NodoArbolBin(“C”)); NodoArbolBin a=raíz.getIzq(); a.setIzq(new NodoArbolBin(“D”)); a=raíz.getDer(); a.setIzq(new NodoArbolBin(“E”)); a.setDer(new NodoArbolBin(“F”)); } } Recorridos: Combinación de actividades para visitar todos los nodos y hacer las respectivas operaciones. Actividades: 1. Visitar raíz (e imprimirla). 2. Recorrer subárbol izquierdo (recursiva). 3. Recorrer subárbol derecho (recursiva). En las actividades recursivas, cada vez que se llegue ahí volverá a realizar la primera instrucción. Combinaciones Recorridos 1, 2, 3 Pre orden 2, 1, 3 In orden 2, 3, 1 Pos orden Ahora, mostraremos como se muestran los datos de este árbol en las diferentes combinaciones: A C B D E F Pre orden: raíz, izquierda, derecha: A, B, D, E, C, F In orden: izquierda, raíz, derecha: D, B, E, A, F, C Pos orden: izquierda, derecha, raíz: D, E, B, F, C, A