Reconstruir un árbol desde preorden e inorden

Tiempo límite 2 s
Memoria límite 256 MB
Casos de prueba 10
Enviar solución

Puntos: 10

Tipos de problema
Lenguajes permitidos
C, C++, Java, Python, Rust

Un árbol binario con valores distintos queda determinado por dos de sus recorridos:

  • preorden: la raíz, luego el subárbol izquierdo en preorden, luego el derecho en preorden;
  • inorden: el subárbol izquierdo en inorden, luego la raíz, luego el derecho en inorden.

Dados ambos, reconstruye el árbol.

Entrada

La primera línea tiene \(n\) \((1 \le n \le 3000)\), la segunda el recorrido en preorden y la tercera el recorrido en inorden. Los valores son distintos \((|v| \le 3000)\) y los recorridos corresponden a un mismo árbol.

Salida

El árbol en el formato de LeetCode, en dos líneas: la cantidad \(k\) de elementos y luego los \(k\) elementos del recorrido por niveles, con null para los hijos que faltan (sin los null del final).

Ejemplo 1

Entrada

5
3 9 20 15 7
9 3 15 20 7

Salida

7
3 9 20 null null 15 7

Ejemplo 2

Entrada

1
-1
-1

Salida

1
-1

Basado en el problema 105 de LeetCode, Construct Binary Tree from Preorder and Inorder Traversal, adaptado a entrada y salida estándar; enunciado redactado para este juez. Es parte de la lista Grind 75 de Yangshun Tay.


Comentarios

No hay comentarios por el momento.