Árbol con las hojas en la profundidad dada
El árbol binario
· / \ / \ · · / \ / \ 1 4 6 9
se puede representar por
ejArbol = Nodo (Nodo (Hoja 1) (Hoja 4)) (Nodo (Hoja 6) (Hoja 9))
El tipo de los árboles binarios se puede definir por
data Arbol a = Hoja a | Nodo (Arbol a) (Arbol a) deriving (Show, Eq)
Definir la función
creaArbol :: Int -> Arbol ()
tal que creaArbol n
es el árbol cuyas hoyas están en la profundidad n
. Por ejemplo,
λ> creaArbol 2 Nodo (Nodo (Hoja ()) (Hoja ())) (Nodo (Hoja ()) (Hoja ()))
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
data Arbol a = Hoja a | Nodo (Arbol a) (Arbol a) deriving (Show, Eq) creaArbol :: Int -> Arbol () creaArbol h | h <= 0 = Hoja () | otherwise = Nodo x x where x = creaArbol (h - 1)
Soluciones en Python
from dataclasses import dataclass from typing import Any, Generic, TypeVar A = TypeVar("A") @dataclass class Arbol(Generic[A]): pass @dataclass class Hoja(Arbol[A]): x: A @dataclass class Nodo(Arbol[A]): i: Arbol[A] d: Arbol[A] def creaArbol(h: int) -> Arbol[Any]: if h <= 0: return Hoja(None) x = creaArbol(h - 1) return Nodo(x, x)