Caminos desde la raíz en un árbol binario
Los árboles binarios se pueden representar con el de tipo de dato algebraico
1 2 3 |
data Arbol = H | N Int Arbol Arbol deriving Show |
Por ejemplo, los árboles
1 2 3 4 5 |
3 7 / \ / \ 2 4 5 8 / \ \ / / \ 1 7 5 6 4 9 |
se representan por
1 2 3 |
ej1, ej2 :: Arbol ej1 = N 3 (N 2 (N 1 H H) (N 7 H H)) (N 4 H (N 5 H H)) ej2 = N 7 (N 5 (N 6 H H) H) (N 8 (N 4 H H) (N 9 H H)) |
Definir la función
1 |
caminosDesdeRaiz :: Arbol -> [[Int]] |
tal que (caminosDesdeRaiz a) es la lista de las caminosDesdeRaiz desde la raíz de a hasta cualquiera de sus nodos. Por ejemplo.
1 2 3 4 |
λ> caminosDesdeRaiz ej1 [[3],[3,2],[3,2,1],[3,2,7],[3,4],[3,4,5]] λ> caminosDesdeRaiz ej2 [[7],[7,5],[7,5,6],[7,8],[7,8,4],[7,8,9]] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 |
data Arbol = H | N Int Arbol Arbol deriving Show ej1, ej2 :: Arbol ej1 = N 3 (N 2 (N 1 H H) (N 7 H H)) (N 4 H (N 5 H H)) ej2 = N 7 (N 5 (N 6 H H) H) (N 8 (N 4 H H) (N 9 H H)) caminosDesdeRaiz :: Arbol -> [[Int]] caminosDesdeRaiz H = [] caminosDesdeRaiz (N x i d) = [x] : [x:ys | ys <- caminosDesdeRaiz i ++ caminosDesdeRaiz d] |
9 Comentarios