Ramas a las que pertenece un elemento
Representamos los árboles binarios con elementos en las hojas y en los nodos mediante el tipo de dato
data Arbol a = H a | N a (Arbol a) (Arbol a) deriving Show
Por ejemplo,
ej1 :: Arbol Int ej1 = N 5 (N 2 (H 1) (H 2)) (N 3 (H 4) (H 2))
Definir la función
ramasCon :: Eq a => Arbol a -> a -> [[a]]
tal que (ramasCon a x) es la lista de las ramas del árbol a en las que aparece el elemento x. Por ejemplo,
ramasCon ej1 2 == [[5,2,1],[5,2,2],[5,3,2]]
Soluciones
data Arbol a = H a | N a (Arbol a) (Arbol a) deriving Show ej1 :: Arbol Int ej1 = N 5 (N 2 (H 1) (H 2)) (N 3 (H 4) (H 2)) -- 1ª definición -- ============= ramasCon :: Eq a => Arbol a -> a -> [[a]] ramasCon a x = [ys | ys <- ramas a, x `elem` ys] ramas :: Arbol a -> [[a]] ramas (H x) = [[x]] ramas (N x i d) = [x:ys | ys <- ramas i ++ ramas d] -- 2ª definición -- ============= ramasCon2 :: Eq a => Arbol a -> a -> [[a]] ramasCon2 a x = filter (x `elem`) (ramas2 a) ramas2 :: Arbol a -> [[a]] ramas2 (H x) = [[x]] ramas2 (N x i d) = map (x:) (ramas2 i ++ ramas2 d)