Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Ricevi due array, preorder e inorder, che elencano i valori distinti dello stesso albero binario. La visita in preorder visita un nodo, poi il suo sottoalbero sinistro e infine quello destro. La visita in inorder visita il sottoalbero sinistro, poi il nodo e infine il sottoalbero destro.

Ricostruisci l'albero e restituiscilo come array in ordine per livelli: la radice all'indice 0, i figli dell'indice i agli indici 2i+1 (sinistro) e 2i+2 (destro), e -1 per ogni posizione vuota. L'array termina con l'ultimo nodo, senza -1 finali.

Funzione

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
i valori in preordine: nodo, sottoalbero sinistro, sottoalbero destro
inorderinteger-array
i valori in ordine: sottoalbero sinistro, nodo, sottoalbero destro
Restituisceinteger-array
l'albero in ordine per livelli, con -1 per le posizioni vuote e senza -1 finali

Vincoli

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104 e tutti i valori sono distinti.
  • inorder contiene gli stessi valori ed entrambi gli array descrivono lo stesso albero binario.
  • La profondità dell'albero è al massimo 14, quindi ogni indice nella risposta è inferiore a 214-1 = 16383.

Esempi

Input
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Output
[7, 3, 4, 0, 9, -1, 6]
Spiegazione
Il preorder inizia con la radice, 7. Si trova alla posizione inorder 3, quindi 0, 3, 9 vanno a sinistra e 4, 6 vanno a destra. 4 ha solo un figlio destro, 6, quindi l’indice 5 rimane -1.
challenge icon

Per approfondire

Riesci a ricostruire l’albero senza ricorsione, in un’unica passata su preorder usando una pila esplicita?

Ripristina il codice
def buildTree(preorder, inorder):
    # Scrivi il codice qui

Test #1

Test #2

Argomenti

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

Output atteso

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