Actualización de «Renombramiento de un árbol»
He actualizado las soluciones del ejercicio Renombramiento de un árbol cuyo enunciado es
Los árboles binarios se pueden representar mediante el tipo Arbol
definido por
data Arbol a = H a | N a (Arbol a) (Arbol a) deriving (Show, Eq, Foldable, Functor)
Por ejemplo, el árbol
"C" / \ / \ / \ "B" "A" / \ / \ "A" "B" "B" "C"
se puede definir por
ej1 :: Arbol String ej1 = N "C" (N "B" (H "A") (H "B")) (N "A" (H "B") (H "C"))
Definir la función
renombraArbol :: Arbol t -> Arbol Int
tal que (renombraArbol a)
es el árbol obtenido sustituyendo el valor de los nodos y hojas por números tales que tengan el mismo valor si y sólo si coincide su contenido. Por ejemplo,
λ> renombraArbol ej1 N 2 (N 1 (H 0) (H 1)) (N 0 (H 1) (H 2))
Gráficamente,
2 / \ / \ / \ 1 0 / \ / \ 0 1 1 2