Tarea
Dados los recorridos de orden previo y posterior de un árbol binario completo, devuelva su recorrido en orden.
Los recorridos se representarán como dos listas, ambas con n enteros positivos distintos, cada uno identificando un nodo de forma única. Su programa puede tomar estas listas y generar el recorrido en orden resultante, utilizando cualquier formato de E / S razonable.
Puede suponer que la entrada es válida (es decir, las listas en realidad representan recorridos de algún árbol).
Este es el código de golf , por lo que gana el código más corto en bytes.
Definiciones
Un árbol binario completo es una estructura finita de nodos , representada aquí por enteros positivos únicos.
Un árbol binario completo es una hoja , que consta de un solo nodo :
1
O una rama , que consiste en un nodo con dos subárboles (llamados los subárboles izquierdo y derecho ), cada uno de los cuales es, a su vez, un árbol binario completo:
1 / \ … …
Aquí hay un ejemplo completo de un árbol binario completo:
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
El recorrido de preorden de un árbol binario completo se define de forma recursiva de la siguiente manera:
- El recorrido de preorden de una hoja que contiene un nodo n es la lista [ n ].
- El recorrido de preorden de una rama que contiene un nodo ny subárboles (L, R) es la lista [ n ] + preordenar ( L ) + preorder ( R ), donde + es el operador de concatenación de lista.
Para el árbol anterior, eso es [6, 3, 1, 8, 2, 9, 4, 5, 7] .
El recorrido de orden posterior de un árbol binario completo se define de forma recursiva de la siguiente manera:
- El recorrido de orden posterior de una hoja que contiene un nodo n es la lista [ n ].
- El recorrido postorden de una rama que contiene un nodo n y sub-árboles (L, R) es la lista de orden posterior ( L ) + postorden ( R ) + [ n ].
Para el árbol anterior, eso es [1, 2, 9, 8, 3, 5, 7, 4, 6] .
El recorrido en orden de un árbol binario completo se define de forma recursiva de la siguiente manera:
- El recorrido en orden de una hoja que contiene un nodo n es la lista [ n ].
- El recorrido en orden de una rama que contiene un nodo n y sub-árboles (L, R) es la lista finde ( L ) + [ n ] + finde ( R ).
Para el árbol anterior, eso es [1, 3, 2, 8, 9, 6, 5, 4, 7] .
En conclusión: dado el par de listas [6, 3, 1, 8, 2, 9, 4, 5, 7] (pre) y [1, 2, 9, 8, 3, 5, 7, 4, 6] (post) como entrada, su programa debería generar [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Casos de prueba
Cada caso de prueba está en el formato preorder, postorder → expected output
.
[8], [8] → [8]
[3,4,5], [4,5,3] → [4,3,5]
[1,2,9,8,3], [9,8,2,3,1] → [9,2,8,1,3]
[7,8,10,11,12,2,3,4,5], [11,12,10,2,8,4,5,3,7] → [11,10,12,8,2,7,4,3,5]
[1,2,3,4,5,6,7,8,9], [5,6,4,7,3,8,2,9,1] → [5,4,6,3,7,2,8,1,9]
"CDE" and "DEC" give "DCE"
? (incluso usando letras unicode si necesito muchos nodos)
"CDE"
no es muy diferente de [67, 68, 69]
:)