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]
:)Réponses:
Perl,
6966625653 octetsComprend +1 pour
-p
Prend la post-commande suivie de la précommande comme une ligne séparée par un espace sur STDIN (notez l'ordre de pré-publication et de post-publication). Les nœuds sont représentés comme des lettres uniques (tout caractère qui n'est ni espace ni nouvelle ligne est OK).
inpost.pl
:L'utilisation du format purement numérique d'origine nécessite beaucoup plus de soin pour identifier exactement un seul numéro et se présente à 73 octets
Utilisé comme
la source
-p
ajoute un;
à la fin, vous n'avez donc pas besoin du dernier;
.s;.* ;;
->s;.* ;
;
à la fin. Mais -p ajoute en fait\n;
à la fin d'un-e
programme. Dans un fichier, il ajoute juste;
si et seulement si le fichier ne se termine pas\n
. Puisque je veux réclamer-p
+1 et non +3, le programme doit fonctionner à partir de la ligne de commande, donc avec-e
. Et je ne veux pas la nouvelle ligne parasite dans la sortie que j'obtiendrais alors'
? Si vous l'exécutez comme vous l'avez (appelez un fichier avec<<<
), vous pouvez laisser le dernier;
hors tension.'
ou utilisedo$0
etc.), je marque toujours-p
comme +3 (espace, moins, p), mais si le code fonctionnerait également sur la ligne de commande où vous obtenez le-e
et le'
gratuitement, je le note+1
car il peut être fourni avec lee
'
gratuitement. Merci d'avoir clarifié cela.Haskell,
8483 octetsla source
JavaScript (ES6), 100 octets
Les E / S sont des chaînes de caractères "sûrs" (par exemple des lettres ou des chiffres). Approche alternative, également 100 octets:
la source