Tracks
/
Python
Python
/
Ejercicios
/
Punto de vista
Punto de vista

Punto de vista

Difícil

Instrucciones

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.

Mensajes de excepción

En ocasiones es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo para indicar cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho con la depuración. Para situaciones en las que sabes que el origen del error será de un tipo determinado, puedes elegir lanzar uno de los tipos de error integrados, pero aún así debes incluir un mensaje significativo.

Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» múltiples ValueErrors si se le pasa a la clase Tree() un árbol que no se puede reorientar, o si no se puede encontrar una ruta entre un start node y un end node. Las pruebas solo pasarán si tanto usas raise para el tipo de exception esperado como incluyes el mensaje esperado con él.

Por favor, revisa con cuidado las pruebas y sus resultados esperados.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Python Exercism

¿Todo listo para empezar Punto de vista?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.