Ancestro común más bajo

El tipo de los árboles binarios se define por

Por ejemplo, el árbol

se define por

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

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,

Soluciones

[schedule expon=’2017-06-16′ expat=»06:00″]

  • Las soluciones se pueden escribir en los comentarios hasta el 16 de junio.
  • El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>

[/schedule]

[schedule on=’2017-06-16′ at=»06:00″]

[/schedule]

7 Comentarios

  1. ramas (H x) = [[x]]
    ramas (N x i d) = [x:ys | ys <- ramas i ++ ramas d]

  2. La definición utilizada sugiere que siempre existe tal ancestro, en tal caso, ni siquiera hace falta recorrer el árbol completamente hasta los nodos en cuestión, de hecho, es suficiente recorrer hasta el propio común de ambos (dado que podemos asumir que existe):

Escribe tu solución