Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Você recebe dois arrays, preorder e inorder, que listam os valores distintos da mesma árvore binária. O percurso em pré-ordem visita um nó, depois sua subárvore esquerda e, em seguida, sua subárvore direita. O percurso em ordem visita a subárvore esquerda, depois o nó e, em seguida, a subárvore direita.

Reconstrua a árvore e retorne-a como um array em ordem por níveis: a raiz no índice 0, os filhos do índice i nos índices 2i+1 (esquerda) e 2i+2 (direita), e -1 para cada posição vazia. O array termina no último nó, sem nenhum -1 no final.

Função

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
os valores em pré-ordem: nó, subárvore esquerda, subárvore direita
inorderinteger-array
os valores em ordem simétrica: subárvore esquerda, nó, subárvore direita
Retornainteger-array
a árvore em ordem por nível, com -1 para posições vazias e sem -1 no final

Restrições

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, e todos os valores são distintos.
  • inorder contém os mesmos valores, e ambos os arrays descrevem a mesma árvore binária.
  • A profundidade da árvore é no máximo 14, então cada índice na resposta é menor que 214-1 = 16383.

Exemplos

Entrada
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Saída
[7, 3, 4, 0, 9, -1, 6]
Explicação
A pré-ordem começa pela raiz, 7. Ela está na posição 3 da inorder, então 0, 3, 9 vão para a esquerda e 4, 6 vão para a direita. 4 tem apenas um filho à direita, 6, então o índice 5 permanece -1.
challenge icon

Para ir além

Você consegue reconstruir a árvore sem recursão, em uma única passagem por preorder com uma pilha explícita?

Redefinir código
def buildTree(preorder, inorder):
    # Escreva o código aqui

Teste #1

Teste #2

Argumentos

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

Saída Esperada

[7, 3, 4, 0, 9, -1, 6]