Ejercicios. 1. En un árbol general, el recorrido en inorden se puede definir recorriendo el primer hijo en inorden, seguido de la raíz y de los demás hijos en inorden. Indicar los recorridos en preorden, inorden y postorden del siguiente árbol general: 2. Los árboles binarios balanceados pueden ser estructuras de índices efectivas para la indización basada en memoria RAM, pero tienen inconvenientes que afloran cuando la estructura comienza a crecer en tamaño. Discuta las siguientes preguntas que refuerzan ese concepto: a) ¿Por qué es importante mantener balanceados los árboles de búsqueda? b) ¿En qué forma un árbol AVL es mejor que un ABB? c) Suponga que se tiene 1000000 llaves almacenadas en disco de manera de formar un árbol binario de búsqueda completamente lleno. i) Si el árbol no está paginado, ¿cual es el número máximo de accesos requeridos para encontrar una llave?, justifique. ii) Si se tienen páginas capaces de almacenar 15 llaves y ramificarse en 16 páginas nuevas, ¿cuál es el máximo número de acceso requeridos para encontrar una llave? iii) ¿Qué sucede ahora si se incrementa la página para almacenar 511 llaves que se ramifican 512 hijos? 3. Muestre el árbol B resultante de cargar el siguiente conjunto de llaves sabiendo que el árbol es de orden 5: CGJXNSUOAEBHIFKLQRTVÑWZDMP Luego realice el mismo procedimiento para generar un árbol B* y posteriormente un árbol B+. 4. Dado un árbol B de orden 256 que contiene 100000 llaves: a) ¿Cuál es el número máximo de descendientes de una página? b) ¿Cuál es el número mínimo de descendientes de una página (sin contar la raíz y las hojas)? c) ¿Cuál es el número mínimo de descendientes de la raíz? d) ¿Cuál es el número mínimo de descendientes de una hoja? e) ¿Cuántas llaves existen en una página que no es hoja con 200 descendientes? f) ¿Cuál es la máxima profundidad del árbol? 5. Dado un árbol B con tamaño de página 4 que inicialmente se encuentra vacío, indicar para cada uno de los siguientes casos, el contenido y la estructura de dicho árbol: a) Se insertan las claves 10, 20, 30, 40. b) A continuación, se insertan las claves 15, 70, 70. c) A continuación, se insertan las claves 35, 70, 80. d) A continuación, se insertan las claves 55, 85, 90. e) A continuación, se insertan las claves 65, 95, 96. f) A continuación, se inserta la clave 84. g) Finalmente, se borra la clave 60. 6. Dado un árbol Binario, implementar un procedimiento en C que imprima las claves del árbol de menor a mayor. Suponga que la clave es imprimible directamente. 7. Codificar una función en C que, recibiendo como parámetro un árbol Binario, devuelva un puntero a aquel subárbol (de entre los que cuelgan del nodo raíz) que posea el mayor número de claves. Obs.: • No se permite la utilización de ninguna estructura de datos auxiliar. • Sólo se permite la realización de un recorrido en el árbol. • En caso de que varios subárboles posean el mayor número de claves, la función devolverá un puntero a aquel cuya suma sea la mayor. 8. Dado un árbol Binario, en el cual pueden existir claves repetidas, sin saber donde se insertaron, se pide codificar una función en C que determine la existencia o no de claves repetidas en el árbol B. NOTA: No realizar más de un recorrido del árbol o utilizar estructuras auxiliares. 9. Dados dos árboles Binarios A1 y A2, codificar un algoritmo en C que determine si el árbol A1 se encuentra incluido dentro del árbol A2 (un árbol A1 está incluido en otro A2 cuando todas las claves de A1 están en A2 y además están distribuidas topológicamente del mismo modo).