Rutas
/
Go
Go
/
Ejercicios
/
Punto de vista
Punto de vista

Punto de vista

Media

Instrucciones

Vuelve a enraizar un árbol en un nodo seleccionado.

Un árbol es un tipo especial de grafo en el que todos los nodos están conectados, pero no hay ciclos. Esto significa que, para cualquier par de nodos, existe exactamente un camino para ir de un nodo a otro.

Este ejercicio consiste en reorientar un árbol para ver las cosas desde otro punto de vista. Por ejemplo, los árboles genealógicos suelen presentarse desde la perspectiva del antepasado:

    +------0------+
    |      |      |
  +-1-+  +-2-+  +-3-+
  |   |  |   |  |   |
  4   5  6   7  8   9

Pero un árbol no tiene una dirección inherente. La misma información puede presentarse desde la perspectiva de cualquier otro nodo del árbol, subiéndolo hasta la raíz y arrastrando con él sus relaciones. Así, el mismo árbol desde la perspectiva del 6 se vería así:

        6
        |
  +-----2-----+
  |           |
  7     +-----0-----+
        |           |
      +-1-+       +-3-+
      |   |       |   |
      4   5       8   9

Esto nos permite describir de forma más sencilla los caminos entre dos nodos. Por ejemplo, el camino de 6 a 9 (que en el primer árbol sube hasta la raíz y luego baja a un nodo hoja distinto) se puede ver que sigue el camino 6-2-0-3-9.

Este ejercicio consiste en tomar un árbol de entrada y reorientarlo desde el punto de vista de uno de sus nodos.

Notas de implementación

El programa de test crea árboles mediante la aplicación repetida de la función variádica New. Por ejemplo, la instrucción

tree := New("a",New("b"),New("c",New("d")))

construye el siguiente árbol:

      "a"
       |
    -------
    |     |
   "b"   "c"
          |
         "d"

Puedes asumir que no habrá valores duplicados en los árboles de test.

El programa de test usará los métodos Value y Children para deconstruir árboles.

La construcción y la deconstrucción básicas del árbol deben funcionar antes de que empieces con la parte interesante del ejercicio, así que se comprueban por separado en los tres primeros tests.


Los métodos FromPov y PathTo son la parte interesante del ejercicio.

El método FromPov recibe un argumento de tipo string, from, que especifica un nodo del árbol mediante su valor. Debe devolver un árbol con el valor from en la raíz. Puedes modificar el árbol original y devolverlo, o crear un árbol nuevo y devolver ese. Si devuelves un árbol nuevo, eres libre de consumir o destruir el árbol original. Por supuesto, es mejor dejarlo sin modificar.

El método PathTo recibe dos argumentos de tipo string, from y to, que especifican dos nodos del árbol mediante sus valores. Debe devolver el camino más corto en el árbol desde el primer nodo hasta el segundo.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Go Exercism

¿Listo para empezar Punto de vista?

Regístrate en Exercism para aprender y dominar Go con 35 conceptos167 ejercicios y mentoría humana real, todo gratis.