Rama izquierda de un árbol binario.
Los árboles binarios con valores en los nodos se pueden definir por
data Arbol a = H | N a (Arbol1 a) (Arbol1 a) deriving (Show, Eq)
Por ejemplo, el árbol
9 / \ / \ 8 6 / \ / \ 3 2 4 5
se puede representar por
N 9 (N 8 (N 3 H H) (N 2 H H)) (N 6 (N 4 H H) (N 5 H H))
Definir la función
ramaIzquierda :: Arbol a -> [a]
tal que ramaIzquierda a
es la lista de los valores de los nodos de la rama izquierda del árbol a
. Por ejemplo,
λ> ramaIzquierda (N 2 (N 5 (N 3 H H) (N 7 H H)) (N 4 H H)) [2,5,3] <!-- TEASER_END -->~~~ # Soluciones A continuación se muestran las [soluciones en Haskell](#haskell) y las [soluciones en Python](#python). <a name="haskell"></a> ## Soluciones en Haskell ~~~haskell data Arbol a = H | N a (Arbol a) (Arbol a) deriving (Show, Eq) ramaIzquierda :: Arbol a -> [a] ramaIzquierda H = [] ramaIzquierda (N x i _) = x : ramaIzquierda i
Soluciones en Python
from dataclasses import dataclass from typing import Generic, TypeVar A = TypeVar("A") @dataclass class Arbol(Generic[A]): pass @dataclass class H(Arbol[A]): pass @dataclass class N(Arbol[A]): x: A i: Arbol[A] d: Arbol[A] def ramaIzquierda(a: Arbol[A]) -> list[A]: match a: case H(): return [] case N(x, i, _): return [x] + ramaIzquierda(i) assert False