Ancestro común más bajo
El tipo de los árboles binarios se define por
data Arbol = H Int | N Int Arbol Arbol
Por ejemplo, el árbol
5
/ \
/ \
3 7
/ \ / \
1 4 6 9
se define por
ejArbol :: Arbol ejArbol = N 5 (N 3 (H 1) (H 4)) (N 7 (H 6) (H 9))
Un árbol ordenado es un árbol binario tal que para cada nodo, los elementos de su subárbol izquierdo son menores y los de su subárbol derecho son mayores. El árbol anterior es un árbol ordenado.
Los ancestros de un nodo x son los nodos y tales que x está en alguna de las ramas de x. Por ejemplo, en el árbol anterior los ancestros de 9 son 5 y 7.
El ancestro común más bajo de dos elementos x e y de un árbol a es el ancestro de x e y de menor profundidad. Por ejemplo, en el árbol anterior el ancestro común más bajo de 6 y 9 es 7.
Definir la función
ancestroComunMasBajo :: Arbol -> Int -> Int -> Int
tal que (ancestroComunMasBajo a x y) es el ancestro de menor profundidad de los nodos x e y en el árbol ordenado a, donde x e y son dos elementos distintos del árbol a. Por ejemplo,
ancestroComunMasBajo ejArbol 4 1 == 3 ancestroComunMasBajo ejArbol 1 6 == 5 ancestroComunMasBajo ejArbol 6 9 == 7