PFH: La semana en Exercitium (24 de diciembre de 2022)

Esta semana he publicado en Exercitium las soluciones de los siguientes problemas:

A continuación se muestran las soluciones.

1. 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

2. Imagen especular de un árbol binario

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir la función

tal que espejo x es la imagen especular del árbol x. Por ejemplo,

Comprobar con QuickCheck las siguientes propiedades, para todo árbol x,

Soluciones

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


Soluciones en Haskell


Soluciones en Python

3. Subárbol de profundidad dada

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

La función take está definida por

Definir la función

tal que takeArbol n t es el subárbol de t de profundidad n. Por ejemplo,

Comprobar con QuickCheck que la profundidad de takeArbol n x es menor o igual que n, para todo número natural n y todo árbol x.

Soluciones

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


Soluciones en Haskell


Soluciones en Python

4. Árbol de profundidad n con nodos iguales

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir las funciones

tales que

  • repeatArbol x es es árbol con infinitos nodos x. Por ejemplo,

  • replicate n x es el árbol de profundidad n cuyos nodos son x. Por ejemplo,

Comprobar con QuickCheck que el número de hojas de replicateArbol n x es 2^n, para todo número natural n.
Soluciones

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


Soluciones en Haskell


Soluciones en Python

5. Suma de un árbol

Los árboles binarios con valores en los nodos se pueden definir por

Por ejemplo, el árbol

se puede representar por

Definir por recursión la función

tal sumaArbol x es la suma de los valores que hay en el árbol x. Por ejemplo,

Soluciones

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


Soluciones en Haskell


Soluciones en Python