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
1 |
data Arbol a = H a | N a (Arbol a) (Arbol a) deriving Show |
Por ejemplo,
1 2 |
ej1 :: Arbol Int ej1 = N 5 (N 2 (H 1) (H 2)) (N 3 (H 4) (H 2)) |
Definir la función
1 |
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,
1 |
ramasCon ej1 2 == [[5,2,1],[5,2,2],[5,3,2]] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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) |