Tâche
Étant donné les traversées pré et post-ordre d'un arbre binaire complet, retournez sa traversée dans l'ordre.
Les traversées seront représentées sous la forme de deux listes, chacune contenant n entiers positifs distincts, chacun identifiant de manière unique un nœud. Votre programme peut prendre ces listes et produire la traversée dans l'ordre résultante, en utilisant n'importe quel format d'E / S raisonnable.
Vous pouvez supposer que l'entrée est valide (c'est-à-dire que les listes représentent en fait les traversées de certains arbres).
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Définitions
Un arbre binaire complet est une structure finie de nœuds , représentée ici par des entiers positifs uniques.
Un arbre binaire complet est soit une feuille , constituée d'un seul nœud :
1
Ou une branche , constituée d'un nœud avec deux sous-arbres (appelés sous-arbres gauche et droit ), chacun étant à son tour un arbre binaire complet:
1 / \ … …
Voici un exemple complet d'arbre binaire complet:
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
La traversée en précommande d'un arbre binaire complet est définie de manière récursive comme suit:
- La traversée en pré-commande d'une feuille contenant un nœud n est la liste [ n ].
- La traversée en pré-commande d'une branche contenant un nœud n et des sous-arbres (L, R) est la liste [ n ] + pré-commande ( L ) + pré-commande ( R ), où + est l'opérateur de concaténation de liste.
Pour l'arbre ci-dessus, c'est [6, 3, 1, 8, 2, 9, 4, 5, 7] .
La traversée post-commande d'un arbre binaire complet est définie de manière récursive comme suit:
- La traversée post-commande d'une feuille contenant un nœud n est la liste [ n ].
- Le parcours postfixe d'une branche contenant un noeud n et des sous-arbres (L, R) est la liste postorder ( L ) + postorder ( R ) + [ n ].
Pour l'arbre ci-dessus, c'est [1, 2, 9, 8, 3, 5, 7, 4, 6] .
La traversée dans l'ordre d'un arbre binaire complet est définie de manière récursive comme suit:
- La traversée dans l'ordre d'une feuille contenant un nœud n est la liste [ n ].
- La traversée dans l'ordre d'une branche contenant un nœud n et des sous-arbres (L, R) est la liste inorder ( L ) + [ n ] + inorder ( R ).
Pour l'arbre ci-dessus, c'est [1, 3, 2, 8, 9, 6, 5, 4, 7] .
En conclusion: étant donné la paire de listes [6, 3, 1, 8, 2, 9, 4, 5, 7] (pré) et [1, 2, 9, 8, 3, 5, 7, 4, 6] (post) en entrée, votre programme devrait sortir [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Cas de test
Chaque scénario de test est au format 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"
:? (même en utilisant des lettres unicode si j'ai besoin de beaucoup de nœuds)
"CDE"
n'est pas très différent de [67, 68, 69]
:)