Correspondance de Schröder (2)⚓︎
Suite de l'exercice précédent
Dans l'exercice précédent, on a construit une fonction qui renvoie un chemin pour un arbre de Schröder donné.
Ici, il s'agit de la fonction réciproque, ce qui établit une correspondance entre arbre de Schröder et chemin de Schröder.
L'objectif de l'exercice est de construire une fonction telle que chemin_vers_arbre(chemin)
renvoie la description d'un arbre de Schröder du chemin
passé en paramètre avec sa description.
Exemples
donne
>>> chemin_vers_arbre([(1, 1), (1, 1), (1, -1), (2, 0), (1, -1)])
[[[], []], [], []]
donne
>>> chemin_vers_arbre([(1, 1), (2, 0), (1, 1), (1, -1), (1, -1)])
[[], [[], []], []]
donne
>>> chemin_vers_arbre([(1, 1), (2, 0), (1, 1), (2, 0), (1, 1), (1, -1), (2, 0), (2, 0), (1, -1), (1, -1)])
[[], [[], [[], []], [], [], []], []]
def cheminpy-undverspy-undarbre(chemin):bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert cheminpy-undverspy-undarbre(bksl-nl [(1, 1), (1, 1), (1, -1), (2, 0), (1, -1)]bksl-nl) == [[[], []], [], []]bksl-nlbksl-nlassert cheminpy-undverspy-undarbre(bksl-nl [(1, 1), (2, 0), (1, 1), (1, -1), (1, -1)]bksl-nl) == [[], [[], []], []]bksl-nlbksl-nlassert cheminpy-undverspy-undarbre(bksl-nl [(1, 1), (2, 0), (1, 1), (2, 0), (1, 1), (1, -1), (2, 0), (2, 0), (1, -1), (1, -1)]bksl-nl) == [[], [[], [[], []], [], [], []], []]bksl-nlbksl-nlbksl-nldef cheminpy-undverspy-undarbre(chemin):bksl-nl arbre = []bksl-nl noeud = arbrebksl-nl pile = []bksl-nl for dx, dy in chemin:bksl-nl if dy == +1:bksl-nl pile.append(noeud)bksl-nl else:bksl-nl noeud = pile[-1]bksl-nl if dy == -1:bksl-nl pile.pop()bksl-nl noeud.append([])bksl-nl noeud = noeud[-1]bksl-nl return arbrebksl-nlbksl-nl# testsbksl-nlbksl-nlassert cheminpy-undverspy-undarbre(bksl-nl [(1, 1), (1, 1), (1, -1), (2, 0), (1, -1)]bksl-nl) == [[[], []], [], []]bksl-nlbksl-nlassert cheminpy-undverspy-undarbre(bksl-nl [(1, 1), (2, 0), (1, 1), (1, -1), (1, -1)]bksl-nl) == [[], [[], []], []]bksl-nlbksl-nlassert cheminpy-undverspy-undarbre(bksl-nl [(1, 1), (2, 0), (1, 1), (2, 0), (1, 1), (1, -1), (2, 0), (2, 0), (1, -1), (1, -1)]bksl-nl) == [[], [[], [[], []], [], [], []], []]bksl-nlbksl-nlbksl-nlbksl-nlbksl-nl
A
Z
Indice 1
On pourra créer une fonction telle que ajout_feuille_droite(arbre, niveau)
ajoute une feuille à arbre
totalement à droite, à la profondeur niveau
.
Indice 2
On pourra utiliser une pile qui recense les ouvertures de niveau.
Indice 3
Cet exercice n'est pas simple du tout. Bon courage !!!