Reparente uma árvore em um nó selecionado.
Uma árvore é um tipo especial de grafo em que todos os nós estão conectados, mas não há ciclos. Isso significa que, para qualquer par de nós, existe exatamente um caminho para ir de um nó até o outro.
Este exercício é sobre reorientar uma árvore para ver as coisas de um ponto de vista diferente. Por exemplo, árvores genealógicas geralmente são apresentadas da perspectiva do ancestral:
+------0------+
| | |
+-1-+ +-2-+ +-3-+
| | | | | |
4 5 6 7 8 9
Mas não existe uma direção inerente em uma árvore. As mesmas informações podem ser apresentadas da perspectiva de qualquer outro nó da árvore, puxando-o até a raiz e arrastando as suas relações junto com ele. Então a mesma árvore da perspectiva do 6 ficaria assim:
6
|
+-----2-----+
| |
7 +-----0-----+
| |
+-1-+ +-3-+
| | | |
4 5 8 9
Isso nos permite descrever de forma mais simples os caminhos entre dois nós. Assim, por exemplo, o caminho de 6 a 9 (que na primeira árvore sobe até a raiz e depois desce até outro nó folha) pode ser visto seguindo o caminho 6-2-0-3-9.
Este exercício envolve pegar uma árvore de entrada e reorientá-la do ponto de vista de um dos nós.
Às vezes é preciso lançar uma exceção. Quando você faz isso, deve sempre incluir uma mensagem de erro significativa para indicar qual é a origem do erro. Isso deixa seu código mais legível e ajuda muito na depuração. Em situações em que você sabe que a origem do erro será de um determinado tipo, você pode escolher lançar um dos tipos de erro internos, mas ainda assim deve incluir uma mensagem significativa.
Este exercício em particular exige que você use a instrução raise para "lançar" vários ValueErrors se a classe Tree() receber uma árvore que não pode ser reorientada, ou se não for possível encontrar um caminho entre um start node e um end node.
Os testes só vão passar se você fizer raise no tipo de exception esperado e incluir a mensagem esperada junto com ele.
Confira com atenção os testes e os resultados esperados.
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.