6.23. Ejercicios de programación

  1. Amplíe la función construirArbolAnalisis para que pueda manejar expresiones matemáticas que no tienen espacios entre cada carácter.
  2. Modifique las funciones construirArbolAnalisis y evaluar para que puedan manejar las sentencias booleanas (and, or, y not). Recuerde que “not” es un operador unitario, por lo que esto complicará un poco su código.
  3. Utilizando el método encontrarSucesor, escriba un recorrido inorden no recursivo para un árbol binario de búsqueda.
  4. Modifique el código de un árbol binario de búsqueda para que sea hilado. Escriba un método de recorrido inorden no recursivo para el árbol binario de búsqueda hilado. Un árbol binario hilado mantiene una referencia de cada nodo a su sucesor.
  5. Modifique nuestra implementación de árbol binario de búsqueda para que maneje correctamente claves duplicadas. Es decir, si una clave ya está en el árbol, entonces la nueva carga útil debería sustituir a la antigua en lugar de agregar otro nodo con la misma clave.
  6. Cree un montículo binario con un tamaño de montículo limitado. En otras palabras, el montículo sólo realizará un seguimiento de los n ítems más importantes. Si el montículo crece en tamaño a más de n ítems, se eliminará el ítem menos importante.
  7. Modifique la función imprimirExpresion para que no incluya un par de paréntesis ‘extra’ alrededor de cada número.
  8. Utilizando el método constructionMonticulo, escriba una función de ordenamiento que pueda ordenar una lista en tiempo \(O(n\log{n})\).
  9. Escriba una función que tome un árbol de análisis para una expresión matemática y calcule la derivada de la expresión con respecto a alguna variable.
  10. Implemente un montículo binario como un montículo máx.
  11. Utilizando la clase MonticuloBinario, implemente una nueva clase llamada ColaPrioridad. Su clase ColaPrioridad debe implementar el constructor, además de los métodos agregar y avanzar.
Next Section - 7. Grafos y algoritmos de grafos