Enumeración de árboles binarios
Los árboles binarios se pueden representar mediante el tipo Arbol definido por
data Arbol a = H a | N (Arbol a) a (Arbol a) deriving Show
Por ejemplo, el árbol
"B"
/ \
/ \
/ \
"B" "A"
/ \ / \
"A" "B" "C" "C"
se puede definir por
ej1 :: Arbol String ej1 = N (N (H "A") "B" (H "B")) "B" (N (H "C") "A" (H "C"))
Definir la función
enumeraArbol :: Arbol t -> Arbol Int
tal que (enumeraArbol a) es el árbol obtenido numerando las hojas y los nodos de a desde la hoja izquierda hasta la raíz. Por ejemplo,
λ> enumeraArbol ej1 N (N (H 0) 1 (H 2)) 3 (N (H 4) 5 (H 6))
Gráficamente,
3
/ \
/ \
/ \
1 5
/ \ / \
0 2 4 6