Reasigna el padre de un árbol a un nodo seleccionado.
Un árbol es un tipo especial de grafo en el que todos los nodos están conectados, pero no hay ciclos. Eso significa que hay exactamente un camino para ir de un nodo a otro para cualquier par de nodos.
Este ejercicio trata de reorientar un árbol para ver las cosas desde otro punto de vista. Por ejemplo, los árboles genealógicos normalmente se presentan desde la perspectiva del antepasado:
+------0------+
| | |
+-1-+ +-2-+ +-3-+
| | | | | |
4 5 6 7 8 9
Pero no hay una dirección inherente en un árbol. La misma información se puede presentar desde la perspectiva de cualquier otro nodo del árbol, subiéndolo a la raíz y arrastrando sus relaciones junto con él. Así, el mismo árbol desde la perspectiva de 6 se vería así:
6
|
+-----2-----+
| |
7 +-----0-----+
| |
+-1-+ +-3-+
| | | |
4 5 8 9
Esto nos permite describir de forma más simple 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 hasta un nodo hoja diferente) 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.
El programa de prueba crea árboles aplicando repetidamente la función variádica New.
Por ejemplo, la sentencia
tree := New("a",New("b"),New("c",New("d")))
construye el siguiente árbol:
"a"
|
-------
| |
"b" "c"
|
"d"
Puedes suponer que no habrá valores duplicados en los árboles de prueba.
El programa de prueba usará los métodos Value y Children para deconstruir los árboles.
La construcción y deconstrucción básica del árbol debe funcionar antes de que empieces con la parte interesante del ejercicio, así que se prueba por separado en las primeras tres pruebas.
Los métodos FromPov y PathTo son la parte interesante del ejercicio.
El método FromPov recibe un argumento from de tipo string que especifica un nodo del árbol por 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, tienes libertad de consumir o destruir el árbol original.
Por supuesto, es mejor dejarlo sin modificar.
El método PathTo recibe dos argumentos from y to de tipo string que especifican dos nodos del árbol por sus valores.
Debe devolver el camino más corto en el árbol desde el primer nodo hasta el segundo.
Regístrate en Exercism para aprender y dominar Go con 35 conceptos167 ejercicios y mentoría humana real, todo gratis.