Recorrido de árboles binarios

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir las funciones

tales que

  • preorden es la lista correspondiente al recorrido preorden del árbol x; es decir, primero visita la raíz del árbol, a continuación recorre el subárbol izquierdo y, finalmente, recorre el subárbol derecho. Por ejemplo,

  • postorden x es la lista correspondiente al recorrido postorden del árbol x; es decir, primero recorre el subárbol izquierdo, a continuación el subárbol derecho y, finalmente, la raíz del árbol. Por ejemplo,

Comprobar con QuickCheck que la longitud de la lista obtenida recorriendo un árbol en cualquiera de los sentidos es igual al número de nodos del árbol más el número de hojas.
Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

Un comentario

  1. Podemos implementar las funciones preorden y postorden de la siguiente manera:

    Luego, podemos comprobar con QuickCheck que la longitud de la lista obtenida recorriendo un árbol en cualquiera de los sentidos es igual al número de nodos del árbol más el número de hojas, utilizando la siguiente función de comprobación:

    Donde numNodos es una función que cuenta el número de nodos del árbol, y numHojas es una función que cuenta el número de hojas del árbol. Ambas funciones se pueden implementar de la siguiente manera:

    Luego, podemos probar la propiedad con QuickCheck de la siguiente manera:

    Pregunta: Falta el generador de árboles.

    Respuesta: Para poder probar la propiedad con QuickCheck, es necesario definir un generador de árboles aleatorios. Una forma de hacerlo es utilizando la siguiente función:

    Con esto, podemos probar la propiedad con QuickCheck de la siguiente manera:

    Al ejecutar el programa, QuickCheck generará una serie de árboles aleatorios y comprobará que la propiedad se cumple para todos ellos. Si todas las pruebas pasan, podemos estar seguros de que las funciones preorden y postorden están implementadas correctamente.

Escribe tu solución