Posiciones en árboles binarios
Los árboles binarios con datos en los nodos se definen por
data Arbol a = H | N a (Arbol a) (Arbol a) deriving (Eq, Show)
Por ejemplo, el árbol
3 / \ / \ 0 5 / \ / \ 5 4 0 3 / \ 2 0
se representa por
ejArbol :: Arbol Int ejArbol = N 3 (N 0 (N 5 (N 2 H H) (N 4 H H)) (N 0 H H)) (N 5 (N 0 H H) (N 3 H H))
Cada posición de un elemento de un árbol es una lista de movimientos hacia la izquierda o hacia la derecha. Por ejemplo, la posición de 4 en al árbol anterior es [I,I,D].
Los tipos de los movimientos y de las posiciones se definen por
data Movimiento = I | D deriving (Show, Eq) type Posicion = [Movimiento]
Definir la función
posiciones :: Eq b => b -> Arbol b -> [Posicion]
tal que (posiciones n a) es la lista de las posiciones del elemento n en el árbol a. Por ejemplo,
posiciones 0 ejArbol == [[I],[I,D],[D,I]] posiciones 2 ejArbol == [[I,I,I]] posiciones 3 ejArbol == [[],[D,D]] posiciones 4 ejArbol == [[I,I,D]] posiciones 5 ejArbol == [[I,I],[D]] posiciones 1 ejArbol == []