Imagina que precisas de transmitir uma árvore binária para um satélite a aproximar-se de Alpha Centauri e tens largura de banda limitada. Como a árvore não tem itens repetidos, pode ser representada de forma única pelos seus percursos em pré-ordem e em ordem.
Escreve o software do satélite para reconstruir a árvore a partir dos percursos.
Um percurso em pré-ordem lê o valor do nó atual antes (daí o "pré") de ler a subárvore esquerda em pré-ordem. A seguir, a subárvore direita é lida em pré-ordem.
Um percurso em ordem lê a subárvore esquerda em ordem, depois o nó atual e, por fim, a subárvore direita em ordem. Ou seja, da esquerda para a direita.
Por exemplo, o percurso em pré-ordem desta árvore é [a, i, x, f, r]. O percurso em ordem desta árvore é [i, a, f, x, r]
a
/ \
i x
/ \
f r
Nota: o primeiro item do percurso em pré-ordem é sempre a raiz.
Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda muito na depuração. Nas situações em que sabes que a origem do erro é de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.
Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError se os argumentos preorder e inorder não coincidirem em termos de comprimento, de elementos, ou se os elementos não forem únicos. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.
Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:
# if preorder and inorder are not the same length
raise ValueError("traversals must have the same length")
# if preorder and inorder do not share the same elements
raise ValueError("traversals must have the same elements")
# if element repeat (are not unique)
raise ValueError("traversals must contain unique items")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.