Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Recibes dos arreglos, preorder e inorder, que contienen los valores distintos del mismo árbol binario. El recorrido en preorden visita un nodo, después su subárbol izquierdo y luego su subárbol derecho. El recorrido en inorden visita el subárbol izquierdo, después el nodo y luego el subárbol derecho.

Reconstruye el árbol y devuélvelo como un arreglo en orden por niveles: la raíz en el índice 0, los hijos del índice i en 2i+1 (izquierdo) y 2i+2 (derecho), y -1 para cada espacio vacío. El arreglo termina en el último nodo, sin ningún -1 final.

Función

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
los valores en preorden: nodo, subárbol izquierdo, subárbol derecho
inorderinteger-array
los valores en orden: subárbol izquierdo, nodo, subárbol derecho
Devuelveinteger-array
el árbol en orden por niveles, con -1 para las posiciones vacías y sin -1 al final

Restricciones

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, y todos los valores son distintos.
  • inorder contiene los mismos valores, y ambos arreglos describen el mismo árbol binario.
  • La profundidad del árbol es como máximo 14, así que todos los índices de la respuesta son menores que 214-1 = 16383.

Ejemplos

Entrada
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Salida
[7, 3, 4, 0, 9, -1, 6]
Explicación
El recorrido en preorden empieza con la raíz, 7. Está en la posición 3 del recorrido inorder, así que 0, 3, 9 van a la izquierda y 4, 6 van a la derecha. 4 solo tiene un hijo derecho, 6, así que el índice 5 sigue siendo -1.
challenge icon

Para ir más allá

¿Puedes reconstruir el árbol sin recursión, en una sola pasada sobre preorder con una pila explícita?

Restablecer código
def buildTree(preorder, inorder):
    # Escribe el código aquí

Prueba #1

Prueba #2

Argumentos

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

Salida Esperada

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