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 :
1O 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]:)Respuestas:
Perl,
6966625653 bytesIncluye +1 para
-pToma el postorder seguido de preorder como una línea separada por espacio en STDIN (observe el orden de pre y post). Los nodos se representan como letras únicas (cualquier carácter que no sea espacio o nueva línea está bien).
inpost.pl:El uso del formato original puramente numérico necesita mucho más cuidado para identificar exactamente un solo número y viene en 73 bytes
Usar como
fuente
-pagrega un;al final, por lo que no necesita el último;.s;.* ;;->s;.* ;;al final. Pero -p en realidad se agrega\n;al final en un-eprograma. En un archivo agrega solo;si y solo si el archivo no termina\n. Como quiero reclamar-pcomo +1 y no como +3, el programa debe funcionar desde la línea de comandos, así que con-e. Y no quiero la nueva línea espuria en la salida que luego obtendría'? Si lo ejecuta de la manera en que lo tiene (llame a un archivo<<<), puede dejar el último;apagado.'o usa,do$0etc.) siempre puntúo-pcomo +3 (espacio, menos, p), pero si el código también funcionaría en la línea de comando donde obtienes el-ey el'gratis Lo+1e'gratis. Gracias por aclarar eso.Haskell,
8483 bytesfuente
JavaScript (ES6), 100 bytes
I / O está en cadenas de caracteres "seguros" (por ejemplo, letras o dígitos). Enfoque alternativo, también 100 bytes:
fuente