Autour des arbres binaires (3)

Différentes représentations

Cet exercice demande d'écrire les fonctions calculant la taille et la hauteur d'un arbre binaire ainsi que différents types de parcours. Il fait partie d'une série dans laquelle on utilise différentes représentations :

On rappelle qu'un arbre binaire est :

  • soit vide ;
  • soit composé d'un nœud appelé racine et ayant une valeur, et de deux arbres binaires appelés sous-arbre gauche et sous-arbre droit de la racine.

On représente dans cet exercice les arbres binaires par un tuple vide () si c'est un arbre binaire est vide, ou dans le cas contraire par un triplet (sag, valeur, sad) où :

  • sag représente le sous-arbre gauche de l'arbre ;
  • valeur est la valeur de la racine ;
  • sad représente le sous-arbre droit de l'arbre.
Créer un arbre binaire

Utiliser cette représentation pour les deux arbres binaires ci-dessous (par commodité, on ne représente pas les arbres vides) :

flowchart TD
    A0((0))
    B0((1))
    C0((2))
    D0((3))
    E0[ ]
    F0((4))
    G0((5))

    A0 --> B0
    A0 --> C0
    B0 --> D0
    B0 ~~~ E0
    C0 --> F0
    C0 --> G0

    a((a))
    b((b))
    c((c))
    d(( ))
    e((e))
    f((f))
    g(( ))
    h((h))
    i(( ))
    j(( ))
    k((k))

    a --> b
    a --> c
    b ~~~ d
    b --> e
    c --> f
    c ~~~ g
    e --> h
    e ~~~ i
    f ~~~ j
    f --> k

    style E0 fill:none, stroke:none
    style d fill:none, stroke:none
    style g fill:none, stroke:none
    style i fill:none, stroke:none
    style j fill:none, stroke:none

ab_int sera l'arbre portant des nombres entiers, ab_str celui portant des caractères.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013»l7;.,a/: Lqèr0npmxj3_6kséRhf45(vtbê=ocgeS19)2iIPd8«uy050Y0P0I0h0V0c0z0k0N0c0h0z0z0L010I0V0r010406050z0#0s0s0h0o0$040Q0M0c0#0`0M0q0k020h0s0r0e0k0B0P140o0m0#0P0z050i111315170 0r041v1C051F0i1F1H1C0 0Y0V0H0/0;0?0^0C0V0O0C0c1V0C0I0}050*0J0c0P1Q0=0@011U1W1Y1W0I1(1*1$0I0J0M0Y171%0o1D0I0C0/1a0z0r0h0q0^0U011,1S010D0,0P0q1i0P1$27292e1.2h1*2k0s2m040a0k0X0o0M0r0M0z0V1d1f0(250o0o0P0N2H1v2o0q1D0i232T0I2120220Y2q0^1Y0q2j2E1$1N1P0:1-2%0V2)0q1}1O1$0r2M1D2R2T2~10281f2/2f2@0o140c0}0k0R2Q320~312p341.36383a0U3d293f2R2$013k0h39040k0v3o2S0 3r3i0^3u3w0k0E3A3q323s3G3a0F3K3C3M3E3t0M373v3a0x3R3g331R3j3W3l3x0d3#3D3(3F3*3Y3x0Z3.3T3:3V3X3H0S3_3h3{3O040R0p403%2:3|3+0R3c1w3e3S4149430R3n4e3p1E2|1v2-2W0Y2!3s0N1}2w0%1O1D2{0P2}3e3K054w0(4E4h350}0h0J0w3z4m2S0k3$3s0M0}0L3K4U3/490|040G0G0T0g4!4V3U0s0V0}4R304$2f4(4-4S3x4/3{4(4+0T473N4N4P4d2~4#3`494X044Z4}5a4L1.514G4_3j564Q5l5b4`0}4|594 494;0}584F5m0^4{4.5C01510T534}4g484M044O0w4l5v5G5d5f5T5r5j0}4*4+5u3e5h5N1.5y043J4}5w5s045%3p5)3s5I4,5F5Y0^5,5S5B5}5H5t5|5i5D5!5$655*5~4=043Q5/5G5E5g5:5Z4)5J5K2~5M555P4P2=0I6a4W4Y6w3U5k6g620q5o5A4n6h646j5G5,466C66635=6z425o606H624(6o4f6q3U6E6s0w0C6S5c6y6K6X685{6.6P0z2c041/015q6P6i5X6}5!5J546$5o0y6+2f5V776l4*6;6 6b016@0}010y6{6O7f6~5(6k676m6Z3p6#6T6(0P7a0^796=7n5!6|7f6%5Q6*7m5_6J7e3s7h6_2m7F7L6R7C7T52737w5Q0D7z017B7N6A6:5?4T7q7g6^2g7l4^6/7U7)7Z4P767K7*047t3B7.7H4P0J7$7(7p6I4)697V3U7P010J7=61707^886D5o7y7}500}803L6P830w0N866-7_4%7E8p4i5o7#8D5;7,4~5G8e0N8h6W8j8J5^7~7X5L825o0z2X8y5e7$6B7?8u5o858H6l8R7.8e0h8O2S7.7o5@8W6(8x8,7r8s0 0i4I4D4o930i4r1v0I4t982Y2U1|1~2W4O1*2T4r1B4K7f2M0s0w0D0h0y0P6)0v0}1n1p1r1t0k0j4G1I3f1C0W0c0k1t0I0k0h0#0?0V0k2D9Q1)1+2J0Y0A2/2M0o0k1*0.150J2M0.2j0k0#2)0k0z0P0#1*0k0D0M0V0z0f0k0l9B0(0#0t0k0s0A234x0.1e9M1*0#0o9)0H290*0O9B0)0k2=4w0q0H0A0q0V2j0I0.9D9F0 9^3f1Y040l0h0k9Y9!0h2H9K1f9:1+9{9}9S0P37an2J0H9|9$0;9=2X0#2Oaf9W1+0c009*2M9`0h0N2i2v0q0I0g9=9R0P0c9_9L0k9Z0o2G1+9.0u0M0#aj9N0H2N9%002=0(a_aL0V1e0fbn1vaE0 bq1G04bn0f14aS0,9K8Y0k2X0n0.9ra?9_9X9Z0;9#9%1+140#aiaSa/0Pa{0N15ao9Jb10o0h0r0V0(a^9M9Y1YbWb+1+9,0IaU250C0A2Ma_aI290.9_0r0;0N1oawaI9B0H0V0o0O9^am9M28b`23bEa2b}9%aHaJbLbkbm1E3f0ibsbs1CaGaIbK15co1fa8b$1+ceb20*0raQa=0,b50k0Ob#0qb)c4a-b32Ga*2K2M2Oa+0/0C0h9A0k0M0J0u0)bvcq90ct0Vbubnbx0.bzb1bD0.1N0D2hbHc!9?0kb`0Ya:4w1jb=c5cka$0oa(0IcW2Ja-bT9`2=3va|1j1*b*aN9%9}bba#cmcz2H0fbpc=90aC9l0Wa?a{9(cxaK2H0.0!dsaP9`9|0.0b9Sb92L0+c40K2X1+cUb=0.d82v9=0#2G9Cc/4z2.3{1:1X1Z1#9m3s2s2j2l0}2y0Q0Nb40r9M0X0$a90q4G4C9m2 4F92d{746(6u8!5W8l8j5#8b8A2f5,4@8i7D8k8_89528J060keDeEeFeD7.5,6G8?89eBeGeO8S8q7seNePeI6d6N8(eweTePeHez7c8$7Mev3s5,5.eY7T8.ez5Je!e#eV0}6VeL7@e@eUe%8seQ8Bexe|6P5,6fe/7~e;7@528 e^898 7v8E6(8Y0oele)8a4!eF8@71e~e 628e8g7Sfa3Re#fffc7cfb6?7:0C8=eheRfGeweA4!eCfCeO8/7:7R8}6QfN7WfefSeGfs7 7d4ffDfH7i8;fzfMfBf$e$fE4+fofufCfU7i0DfKf(8RfRf?f25;fF7$8e7kf:f3fZ8T6nf{fr8L7:8Ngb8If=f|e=gnf%fg8 1veg949j4A900(0*0,0z04.
Taille

Compléter la fonction taille qui prend en paramètre un arbre binaire et renvoie la taille de l'arbre binaire représenté.

Exemples
>>> ab = (((), 1, ()), 0, (((), 3, ()), 2, ()))
>>> taille(())
0
>>> taille(ab)
4

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013wla/: +]r0nm3kshf4(vtbu=ocgeS1)[2iPdpy050K0C0v0d0I0c0p0g0A0c0d0p0p0y010v0I0L010406050p0x0m0m0d0j0M040D0z0c0x0%0z0l050e0.0:0=0@0,0L041017051a0e1a1c170,0K0I0u0V0X0Z0#0q0I0B0q0c1q0q0v0*050Q0w0c0C1l0Y0!011p1r1t1r0v1z1B1x0v0w0z0K0@1y0j180v0q0V0`0p0L0d0l0#0H011D1n010r0S0C0l0d0m0C1x1#1%1,1F1/1B1=1@0*0a0g0J0j0z0L0z0p0I0}0l0g0O1Z0j0j0C0A2c101`0l180e1X2p0v1V1U1W0K1|0#1t0l1;291x1i1k0W1E2z0I2B0l1R1j1x0L2i182n2p2T0-1$2d2H1-2M0j0;0c0*0E2m2X0+2W1{2Z1F2#2%0*0H2+1%2-2n2y012=0d2(040n2_2o0,2|2:0#2 310s342p2Q0C2p2F2s0K2w2}0A1R1^183i1b2R2.2o3d053n0O2S2X2}0o0*0O0r3w371m1F0b0*0g3H3B382~0r0*0Q0S1B3O2/3J0#0)040t3X2Y3Z2~0*0=0w2i3(2}3#0F0f3d060g3`3N3I2I013D040I3G112,3|3P3*0l3,0j3.0C3d463Y3~0z0*0y0y4e3u3;0*0t3?3^3{4t4f3)3~402i0v0x0j0 442`4v2}0m0I0*0k4s3{4n3Q4y0P4B4D2T4G3Q4I2)4m3}1-4i040h4Z473~49043U0c3W4E3v4!1F3#3%4;3A4g2!4a4c3:3Q3#0G503*4X044L4`4O3*3#0i0F4)4|1F4$4(4`4V483T0R4/4d594?3!4p544+4~3/5r4*1-525v1-562^5z5g5t045d3^103y3g193t0e3r2q3k102t2s1Q1S2s0d1A5P5S1j2-5S0P5o0p04.
Hauteur

Compléter la fonction hauteur qui prend en paramètre un arbre et qui renvoie la taille de l'arbre binaire représenté par l'objet en question.

Exemples
>>> ab = (((), 1, ()), 0, (((), 3, ()), 2, ()))
>>> hauteur(())
0
>>> hauteur(ab)
3

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013wl,a/: +]r0npmx3kshf4(vtb=ocgeS1)[2iPduy050M0E0y0e0K0c0s0h0C0c0e0s0s0A010y0K0n010406050s0N0o0o0e0k0O040F0B0c0N0)0B0m050f0:0=0@0_0.0n041219051c0f1c1e190.0M0K0x0X0Z0#0%0t0K0D0t0c1s0t0y0,050S0z0c0E1n0!0$011r1t1v1t0y1B1D1z0y0z0B0M0_1A0k1a0y0t0X0|0s0n0e0m0%0J011F1p010u0U0E0m0e0o0E1z1%1)1.1H1;1D1@1_0,0a0h0L0k0B0n0B0s0K0 0m0h0Q1#0k0k0E0C2e121|0m1a0f1Z2r0y1X1W1Y0M1~0%1v0m1?2b1z1k1m0Y1G2B0K2D0m1T1l1z0n2k1a2p2r2V0/1(2f2J1/2O0k0?0c0,0G2o2Z0-2Y1}2#1H2%2)0,0J2-1)2/2p2A012@0e2*040q2{2q0.2~2=0%31330v362r2S0E2r2H2u0M2y2 0C1T1`1a3k1d2T2:2q3f053p0Q2U2Z2 0r0,0Q0u3y391o1H0b0,0h3J3D3a300u0,0t0e0~0E0N0k3Q2;3L0%0+040w3$2!3(300,0@0z2k3-2 3*0H0g3f060h3 3P3K2K013F040K3I132.413R3/0m3;0k3?0E3f4b3%430B0,0A0A4j3w3_0,0w3{3}404y4k3.43452k0y3!11492|4A2 0o0K0,0l4x404s3S4D0R4G4r421/4M2+4X4c4m0,0i4$4l2$0z0,0?0p3^3S3*3,4I3x4Y2?3V3X0y3Z3#4_3C4,1H4@4=4d4f4h57433*0I5b4Z4N044P524S3/3*0j0H0d4+4B2$4}3Y3!5f554u5x3b593@5k4{3)0,5e5E4%5g2_5A015n0H0H3}123A3i1b3v0f3t2s3m122v2u1S1U2u0e1C5V5Y1l2/5Y0R0T0V04.
Parcours en largeur

Compléter la fonction largeur qui prend en paramètre un arbre et renvoie la liste des valeurs des nœuds rencontrés lors du parcours en largeur de l'arbre binaire représenté par l'objet en question.

La classe File décrite ci-dessous est déjà importée dans l'éditeur.

Interface de la classe File
  • f = File() : crée une file vide et l'affecte à la variable f;

  • f.est_vide() : renvoie le booléen indiquant si la file f est vide ;

  • f.enfile(x) : enfile l'élément x dans la file f;
  • f.defile() : défile un élément de la file f si elle n'est pas vide et le renvoie. Provoque une erreur si la file est vide.
La classe File
from collections import deque


class File:
    """Classe définissant une structure de file"""

    def __init__(self):
        self.valeurs = deque([])

    def est_vide(self):
        """Renvoie le booléen True si la file est vide, False sinon"""
        return len(self.valeurs) == 0

    def enfile(self, x):
        """Place x à la queue de la file"""
        self.valeurs.appendleft(x)

    def defile(self):
        """Retire et renvoie l'élément placé à la tête de la file.
        Provoque une erreur si la file est vide
        """
        if self.est_vide():
            raise ValueError("La file est vide")
        return self.valeurs.pop()

    def __repr__(self):
        """Convertit la file en une chaîne de caractères"""
        if self.est_vide():
            return "∅"
        return f"(queue) {' -> '.join(str(x) for x in self.valeurs)} (tête)"
Exemples
>>> largeur(())
[]
>>> ab = (((), 1, ()), 0, (((), 3, ()), 2, ()))
>>> largeur(ab)
[0, 1, 2, 3]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013wl7.,a/: ]r0!npmx3_6kshf45(vtb=ocgeS19)2[iPd8uFy050S0J0D0g0Q0c0w0j0H0c0g0w0w0F010D0Q0p010406050w0U0q0q0g0l0W040K0G0c0U0;0G0o050h0{0}0 110_0p041a1h051k0h1k1m1h0_0S0Q0C0)0+0-0/0x0Q0I0x0c1A0x0D0@050!0E0c0J1v0,0.011z1B1D1B0D1J1L1H0D0E0G0S111I0l1i0D0x0)140w0p0g0o0/0O011N1x010y0$0J0o0g0q0J1H1/1;1_1P1|1L1 210@0a0j0R0l0G0p0G0w0Q170o0j0Y1-0l0l0J0H2m1a240o1i0h1+2z0D1)1(1*0S260/1D0o1~2j1H1s1u0*1O2J0Q2L0o1#1t1H0p2s1i2x2z2%0`1:2n2R1`2W0l0~0c0@0j0L2w2+0^2*252-1P2/2;2?0O2_1;2{2x2I01300g2=040j0s342y0_372~0/3a3c0j0z3g362+383m2?0A3q3i3s3k390G2:3b2?0u3x2|2,1w2 3C313d0d3H3j3K3l3M3E3d0T3Q3z3S3B3D3n0M3Y2}3!3u040L0m3)3J2S3#3N0L2^1b2`3y3*3=3,0L333`353|3;2.3U3c0L3f423h3I3t470@0L3p4b2z2!0J2z2P2C0S2G380H1#221i4o1l2#3I2(2`054t0Y2$3Z3=0v0@0Y0y3q4d3A0b2?4N3R3~0y0@0+0l0I0J0U0l4S4H1`0?040B4%3}2.0@0 0E2s4-451P4*0N0i3x0j4~0j4O3!4J040Q4M4j504T4/044;4?57513=0G0@0F0F3q584(4_0@0B4{4}4 5t5f1`532s0D4#195e595o040P0k5s4~5v2 0@280J5l5K0/5h045k5C5n3l0@0V1}4@384*5q5I5m4.5L045N5#3A5S0e5/3+0@1~5.4j5Q015%5?3~4:0l4=5O5{5D0/4`5)5|0o0@2s0{0c0!0D5P66015S5U2%5*4^670@5G696j530b1z1L6i5W6k4Q042W6h5V5+5X5-5!656A5;5 5a0J0w0D0t0C0Q0Y6O5E5q4|4j065t5u6j6b5b6z6H6k5i6,6p395M6K2)6j6N6L6-6*4L6@4C6j5%0N5)6(6A53556:3t4:795:0@0n6m2`6o5$5p5r6#6%7n7i3A6*0w0g0I6X6q040f7c5@040r7v5}0@7y6G6;7r0g0S7z5g6/7H7a6+7m7o756|6c6Q0U6f0g6F6^6M0@5=6{7I4:0p0p1~7L7*7j4+7D6*7C7;3A687S7T5J6)6?6y7`3!6`7$7V045_6 355|5~8360047s7u8e4)0@737}7~6a8164866;85706A6*89828s7=4,8j5,7s7:8A7{8l6t767W5z0l5B6n8p046d7Y6g3H0h4E4m1j4z0h4x2A4q1a2D2C1!1$2C0g1K8Z8$1t2{8$0Z0#0%04.
Parcours en profondeur préfixe

Compléter la fonction prefixe qui prend en paramètre un arbre et renvoie la liste des valeurs des nœuds rencontrés lors du parcours en profondeur préfixe de l'arbre binaire représenté par l'objet en question.

Exemples
>>> prefixe(())
[]
>>> ab = (((), 1, ()), 0, (((), 3, ()), 2, ()))
>>> prefixe(ab)
[0, 1, 2, 3]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013l/Dr!n{3_éhf45(Ovtb1ceS[iIPpw.;à,a: +q]NmxjksRyê=og)U2du6}050%0w0s0I0z0b0T0K0v0b0I0T0T0X010s0z0C010406050T0(0P0P0I0e0V040x0Y0b0(0~0Y0g0K020I0P0C0F0K0U0w180e0M0(0w0T050c1517191b130C041z1G051J0c1J1L1G130%0z0r0?0^0`0|0l0z0Z0l0b1Z0l0s11050.0t0b0w1U0_0{011Y1!1$1!0s1,1.1*0s0t0Y0%1b1+0e1H0s0l0?1e0T0C0I0g0|0$011:1W010m0:0w0g1m0w1*2b2d2i1=2l1.2o0P2q040a0K0B0e0Y0C0Y0T0z1h1j0,290e0e0w0v2L1z2s0g1H0c272X0s2524260%2u0|1$0g2n2I1*1R1T0@1;2+0z2-0g211S1*0C2Q1H2V2X32142c1j2?2j2{0e180b110u2U3612352t381=3a3c110$3g2d3i2V2*013n0I3d040i3r2W133u3l0|3x3z0n3C3t363v3I110o3L3E3N3G3w0Y3b3y110)3L1I301z2;2!0%2(3v0v212A0+1S1H2 0w313h3$3/0,3`3k1V1=0S110,0m3$3F410|0D110K473U493w0m113^2l0Q0w4e402@0110040p4o374g0g11190t2Q4v3v4s0!0J3S0K4J4d484q43040z461A3h4L4f4q4y044A4C4S3s4U4p2j0Y110X0X3L4%4w4q4s0p4G4I4K4_3j4:2j4O2Q0s0(0e0g4.4{4E110y0N4^4J553V4O0w0;4n4#2W5c4g4s4H5i124_4`4M39110T0I0Z4D3V4s0H545s3m110r3y0w515y5l115B5o4/3O5u0I0%5C4V4)4+5U4(5E4Y0e4B5h32065q4K5k4N114 51535O5-2j4s0y5K4W5F5H5J5o5@1=4s595?5D0|4*040L5Y4|5!4k0z4m5{5^114u60663w5R5x6l5V62110!6b3v686a656r3H4j2Q4l5(3{6m4=6h5!5v5T6q5Z0|4F3S1z3}3_3%6U0c3*1z0s3,6Z2$2Y20222!0I1-6W3*1F3 6c0|2Q0P0j0m0I0S0w0j0l0i111r1t1v1x0K5n341M3i1G0A0b0K1x0s0K0G0K2{0s0w0e0K740K0^291n1.0Q2K0k7e1j7l1n0=2N0v0-7l0K0I0C2 0Y0v0l1/0g007f0K2c0=2G0~3c0w0H7S0(0z0T1v001i0K1g0:7$1/0,0=3/0g0v0I0s0k2o2L7C1/1$0T7l0T0E1I7a040#2-7S2I2J0t7-7_89510K0k0r2K7m0?5f0I7e800K0%007,7 8l0(880m1i2S0z7*2d2-4m8r0w0C7#0=0^740b1.0K7*0P1g7m0/7g0s0Y0(0R8Y0e8L8o0P0W2z7q7$7l0E0K0d2d7;1/7@0T7Z7r3/7t0w7v8e2n0K7A0C0=2l2o8P7R610|192K0l187l0Q11090p099f0l7@0b0h0q0*0p0O0!096u5O0p2H8g9a019c279f8~9i9t9w4.5G1.517C8=7q004Z0w0!83791Q1S3v1@1#1%1)3@3(78346T045r6A014O456J4a4c9@4h6C0w6E9`6I6N6=6n5#5%9 6t773h5*5+5P5d5/0-5;6v3V4X0j6e4m0j0I0(0Qa64t9`4X9Tar5N32ac5L04589x5)aa5b6m9=9}9`4b9.at4i04ak6D6f6}aoaqa156asaWai4z5$4!346H5Mah4x110;0sar4@5oaF5q9C4O4Qa+5|a4a%4T9C680f4-6z6O4r6ja;5)aba@6m4X5v6pa(9:5Aa{5t049M5I0eawbj6K5Sbq675Xb4a2aua$6F3sa?ba9C4Xa.9`689Wbgb5au7J2n6MbKa2a0bQ5Qbl5~boaZaAaDa9ba9/bL11aQ9}aSanapar6kbTa!04bebpbwbUbGbY4;6t5ab$bEb)alaTb.b|6iaYb;a,b?bsc66s04axa bca-80a:b b%a24~af52bta3b{5)6S3:2X3^2X6/1K040O0Y7l7n7(0:0K150m2l7g2N0%0k0C0^7E7n7r1_88059-a.0E7I0CbO0pbm519x9-7Z2c7n0ec%3X7g7i0b000z7t0k2z0g0.2L8H958A7|4d9-cL9~0c9-8Q0(d7cx2_da9-9W1P3)0-0/0;04.
Parcours en profondeur infixe

Compléter la fonction infixe qui prend en paramètre un arbre et renvoie la liste des valeurs des nœuds rencontrés lors du parcours en profondeur infixe de l'arbre binaire représenté par l'objet en question.

Exemples
>>> infixe(())
[]
>>> ab = (((), 1, ()), 0, (((), 3, ()), 2, ()))
>>> infixe(ab)
[1, 0, 3, 2]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013l/Dr!n{3_éhf45(Ovtb1ceS[iIPpw.;à,a: +q]NmxjksRyê=og)U2du6}050%0w0s0I0z0b0T0K0v0b0I0T0T0X010s0z0C010406050T0(0P0P0I0e0V040x0Y0b0(0~0Y0g0K020I0P0C0F0K0U0w180e0M0(0w0T050c1517191b130C041z1G051J0c1J1L1G130%0z0r0?0^0`0|0l0z0Z0l0b1Z0l0s11050.0t0b0w1U0_0{011Y1!1$1!0s1,1.1*0s0t0Y0%1b1+0e1H0s0l0?1e0T0C0I0g0|0$011:1W010m0:0w0g1m0w1*2b2d2i1=2l1.2o0P2q040a0K0B0e0Y0C0Y0T0z1h1j0,290e0e0w0v2L1z2s0g1H0c272X0s2524260%2u0|1$0g2n2I1*1R1T0@1;2+0z2-0g211S1*0C2Q1H2V2X32142c1j2?2j2{0e180b110u2U3612352t381=3a3c110$3g2d3i2V2*013n0I3d040i3r2W133u3l0|3x3z0n3C3t363v3I110o3L3E3N3G3w0Y3b3y110)3L1I301z2;2!0%2(3v0v212A0+1S1H2 0w313h3$3/0,3`3k1V1=0S110,0m3$3F410|0D110K473U493w0m112_2l0Q0w4e402@0110040p4o374g0g11190t2Q4v3v4s0!0J3S0K4J4d484q43040z461A3h4L4f4q4y044A4C4S3s4U4p2j0Y110X0X3L4%4w4q4s0p4G4I4K4_3j4:2j4O2Q0s0(0e0g4.4{4E110y0N4^4J553V4O0w0;4n4#2W5c4g4s4H5i124_4`4M39110T0I0Z4D3V4s0H545s3m110r3y0w515y5l115B5o4/3O5u0I0%5C4V4)4+5U4(5E4Y0e4B5h32065q4K5k4N114 51535O5-5t4P0g4l5(3{5D0|4=5K4W5R5x5o5@1=4F5Y4|1=4*040L6956040y615^5G1.5J655~4r11595?6p6c6e6t5V5!4k0z4m6j67114u6o6y3H5R5T6H5Z5 110!3S1z3}3_3%6U0c3*1z0s3,6Z2$2Y20222!0I1-6W3*1F3 6a0|2Q0P0j0m0I0S0w0j0l0i111r1t1v1x0K5n341M3i1G0A0b0K1x0s0K0G0K2{0s0w0e0K740K0^291n1.0Q2K0k7e1j7l1n0=2N0v0-7l0K0I0C2 0Y0v0l1/0g007f0K2c0=2G0~3c0w0H7S0(0z0T1v001i0K1g0:7$1/0,0=3/0g0v0I0s0k2o2L7C1/1$0T7l0T0E1I7a040#2-7S2I2J0t7-7_89510K0k0r2K7m0?5f0I7e800K0%007,7 8l0(880m1i2S0z7*2d2-4m8r0w0C7#0=0^740b1.0K7*0P1g7m0/7g0s0Y0(0R8Y0e8L8o0P0W2z7q7$7l0E0K0d2d7;1/7@0T7Z7r3/7t0w7v8e2n0K7A0C0=2l2o8P7R660|192K0l187l0Q11090p099f0l7@0b0h0q0*0p0O0!096Q5O0p2H8g0O0K6l5I8$8r8=7q004Z0w0!83791Q1S3v1@1#1%1)3@3(78346T045r6I014O456D4a4c9,4h4j5`6B5|3s9a6q4t9/4X9L9/4F773h5*5+5P5d5/0-5;6f3V4X0j6A4m0j0I0(0Q9 6F9|4z5$4!346p5Aaa5L6h0N9x5)a35b6p9*0w4Raq9(4b9$9|4i04ad9=afahaj6M6=9`6GaF6N3wan5%ak045N32a54x110;0sa!4@5oaz5q9_4O4Qat625#aZ6xaW6c0f4-a|aS4=a.5)a4a;6p4X5v64aVb25Ma^6k5H6nbc6ga$4T9_b95Sbf6b5Xb15Qa`apa2b69%aWacae6}aPa!aU5}9(bobbbHaWasbtaba*80a-5abybnbQa,aR3v6c9ObjbP4Y7J2n6Lb$aubG9^b85Fbh0ebSa/by5,b:aLbCagaibFam045vb+bLbda#bq6J04a+b@a%b6a:bzaS4~a852c8aXcabRa/6S3:2X3^2X6/1K040O0Y7l7n7(0:0K150m2l7g2N0%0k0C0^7E7n7r1_88059#a+0E7I0Cb*0p9E519x9#7Z2c7n0ecX3X7g7i0b000z7t0k2z0g0.2L8H958A7|4d9#3^5{cq3~8Q0(d1crcFd40c9#9O1P3)0-0/0;04.
Parcours en profondeur suffixe

Compléter la fonction suffixe qui prend en paramètre un arbre et renvoie la liste des valeurs des nœuds rencontrés lors du parcours en profondeur suffixe de l'arbre binaire représenté par l'objet en question.

Exemples
>>> suffixe(())
[]
>>> ab = (((), 1, ()), 0, (((), 3, ()), 2, ()))
>>> suffixe(ab)
[1, 3, 2, 0]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013l/Dr!n{3_éhf45(Ovtb1ceS[iIPpw.;à,a: +q]NmxjksRyê=og)U2du6}050%0w0s0I0z0b0T0K0v0b0I0T0T0X010s0z0C010406050T0(0P0P0I0e0V040x0Y0b0(0~0Y0g0K020I0P0C0F0K0U0w180e0M0(0w0T050c1517191b130C041z1G051J0c1J1L1G130%0z0r0?0^0`0|0l0z0Z0l0b1Z0l0s11050.0t0b0w1U0_0{011Y1!1$1!0s1,1.1*0s0t0Y0%1b1+0e1H0s0l0?1e0T0C0I0g0|0$011:1W010m0:0w0g1m0w1*2b2d2i1=2l1.2o0P2q040a0K0B0e0Y0C0Y0T0z1h1j0,290e0e0w0v2L1z2s0g1H0c272X0s2524260%2u0|1$0g2n2I1*1R1T0@1;2+0z2-0g211S1*0C2Q1H2V2X32142c1j2?2j2{0e180b110u2U3612352t381=3a3c110$3g2d3i2V2*013n0I3d040i3r2W133u3l0|3x3z0n3C3t363v3I110o3L3E3N3G3w0Y3b3y110)3L1I301z2;2!0%2(3v0v212A0+1S1H2 0w313h3$3/0,3`3k1V1=0S110,0m3$3F410|0D110K473U493w0m11150m2l0Q0w4e402@0110040p4p374g0g11190t2Q4w3v4t0!0J3S0K4K4d484r43040z461A3h4M4f4r4z044B4D4T3s4V4q2j0Y110X0X3L4(4x4r4t0p4H4J4L4`3j4;2j4P2Q0s0(0e0g4/4|4F110y0N4_4K563V4P0w0;4o4$2W5d4g4t4I5j124`4{4N394j0I0Z4E3V4t0H555t3m110r3y0w525y5m115B5p4:3O5v0%5C4W4*4,5T4)5E4Z0e4C5i32065r4L5l4O115052545O5,5u044k4m5%3{5D0|4?5K4X5v5x5p5?1=4G5X4}1=4+040L685Q5^0(4l0z4n602j5 645}3w5R6l66110!6e3V6b6d5=6p4t0y6s3H5F5H5J6o5U6t045a5p130c3}3_3%6S0c3*1z0s3,6X2$2Y20222!0I1-6U3*1F3 690|2Q0P0j0m0I0S0w0j0l0i111r1t1v1x0K5o341M3i1G0A0b0K1x0s0K0G0K2{0s0w0e0K720K0^291n1.0Q2K0k7c1j7j1n0=2N0v0-7j0K0I0C2 0Y0v0l1/0g007d0K2c0=2G0~3c0w0H7Q0(0z0T1v001i0K1g0:7!1/0,0=3/0g0v0I0s0k2o2L7A1/1$0T7j0T0E1I78040#2-7Q2I2J0t7+7@87520K0k0r2K7k0?5g0I7c7~0K0%007*7}8j0(860m1i2S0z7(2d2-4n8p0w0C7Z0=0^720b1.0K7(0P1g7k0/7e0s0Y0(0R8W0e8J8m0P0W2z7o7!7j0E0K0d2d7/1/7=0T7X7p3/7r0w7t8c2n0K7y0C0=2l2o8N7P650|192K0l187j0Q11090p099d0l7=0b0h0q0*0p0O0!096v5O0p2H8e0O0K5G1.527A8:7o004!0w0!81771Q1S3v1@1#1%1)3@3(76346R045s6K0|4P456E014b9!9*0g4i6g6i6k6J5Y5~114v9@6:6q5!5$9*4G753h5)5*5P5e5.0-5:6w4y110j5_6j6{0I0(0Qa19`9.4A5#4#346B5Mac4=580N9v5(a55c6p9(0w4Sas9$9+4c9.9:af6h5`0jajal9|574uao9 ar5|aI5Aav5@0;0sam044^6Oa6a74g4P4Ra$5Z9Ja?0|6b0f4.6Aa!9`a,5(a.9#9^9~0T5wa*5N32a/61049C5I0eb9a_b60I5Sa~b56ba}bb989~a^a-b3aCaI4YaN9=aiaka*9{aHb54Yb763bG9}a#bn9}4Ya(a*aza4bwbxbHaeag4naQbDaT5zanb%ad5^blbibO6fbRb*awa+5bb3bsbQ7~9*6b9MbL6f7G0C2nbmc0b(aVb=5@bf6Ic65Lb@bv5*bs4 aa53bjb{a)6O1z9Z6T2X6-1K040O0Y7j7l7$0:0Kag7e2N0%0k0C0^7C7l7p1_86059Za(0Ec2c40pcb0e9v9Z7X2c7l0ec23X7e7g0b000z7r0k2z0g0.2L8F938y7`4d9Z3^5`cq3:9!8Wc}d22_d06Qd29M1P3)0-0/0;04.