Árbol con las hojas en la profundidad dada
El árbol binario
1 2 3 4 5 6 |
· / \ / \ · · / \ / \ 1 4 6 9 |
se puede representar por
1 2 |
ejArbol = Nodo (Nodo (Hoja 1) (Hoja 4)) (Nodo (Hoja 6) (Hoja 9)) |
El tipo de los árboles binarios se puede definir por
1 2 3 |
data Arbol a = Hoja a | Nodo (Arbol a) (Arbol a) deriving (Show, Eq) |
Definir la función
1 |
creaArbol :: Int -> Arbol () |
tal que creaArbol n
es el árbol cuyas hoyas están en la profundidad n
. Por ejemplo,
1 2 |
λ> creaArbol 2 Nodo (Nodo (Hoja ()) (Hoja ())) (Nodo (Hoja ()) (Hoja ())) |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 6 7 8 9 |
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) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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) |