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

.1280135tf4)2I«rjR3,sao iug0x»è8m1P6pnl7h.e=céLy:v9ê(q;S/b_dk050#0K0c0p0s0G0o0r0M0G0p0o0o0L010c0s0E010406050o0t0A0A0p0j0P040X0q0G0t0`0q0F0r020p0A0E0W0r0l0K140j0V0t0K0o050Y111315170 0E041v1C051F0Y1F1H1C0 0#0s0R0/0;0?0^0I0s0u0I0G1V0I0c0}050*0Z0G0K1Q0=0@011U1W1Y1W0c1(1*1$0c0Z0q0#171%0j1D0c0I0/1a0o0E0p0F0^0g011,1S010d0,0K0F1i0K1$27292e1.2h1*2k0A2m040a0r0C0j0q0E0q0o0s1d1f0(250j0j0K0M2H1v2o0F1D0Y232T0c2120220#2q0^1Y0F2j2E1$1N1P0:1-2%0s2)0F1}1O1$0E2M1D2R2T2~10281f2/2f2@0j140G0}0r0B2Q320~312p341.36383a0g3d293f2R2$013k0p39040r0m3o2S0 3r3i0^3u3w0r0e3A3q323s3G3a0b3K3C3M3E3t0q373v3a0D3R3g331R3j3W3l3x0H3#3D3(3F3*3Y3x0z3.3T3:3V3X3H0S3_3h3{3O040B0v403%2:3|3+0B3c1w3e3S4149430B3n4e3p1E2|1v2-2W0#2!3s0M1}2w0%1O1D2{0K2}3e3K054w0(4E4h350}0p0Z0!3z4m2S0r3$3s0q0}0L3K4U3/490|040U0U0f0n4!4V3U0A0s0}4R304$2f4(4-4S3x4/3{4(4+0f473N4N4P4d2~4#3`494X044Z4}5a4L1.514G4_3j564Q5l5b4`0}4|594 494;0}584F5m0^4{4.5C01510f534}4g484M044O0!4l5v5G5d5f5T5r5j0}4*4+5u3e5h5N1.5y043J4}5w5s045%3p5)3s5I4,5F5Y0^5,5S5B5}5H5t5|5i5D5!5$655*5~4=043Q5/5G5E5g5:5Z4)5J5K2~5M555P4P2=0c6a4W4Y6w3U5k6g620F5o5A4n6h646j5G5,466C66635=6z425o606H624(6o4f6q3U6E6s0!0I6S5c6y6K6X685{6.6P0o2c041/015q6P6i5X6}5!5J546$5o0$6+2f5V776l4*6;6 6b016@0}010$6{6O7f6~5(6k676m6Z3p6#6T6(0K7a0^796=7n5!6|7f6%5Q6*7m5_6J7e3s7h6_2m7F7L6R7C7T52737w5Q0d7z017B7N6A6:5?4T7q7g6^2g7l4^6/7U7)7Z4P767K7*047t3B7.7H4P0Z7$7(7p6I4)697V3U7P010Z7=61707^886D5o7y7}500}803L6P830!0M866-7_4%7E8p4i5o7#8D5;7,4~5G8e0M8h6W8j8J5^7~7X5L825o0o2X8y5e7$6B7?8u5o858H6l8R7.8e0p8O2S7.7o5@8W6(8x8,7r8s0 0Y4I4D4o930Y4r1v0c4t982Y2U1|1~2W4O1*2T4r1B4K7f2M0A0!0d0p0$0K6)0m0}1n1p1r1t0r0Q4G1I3f1C0h0G0r1t0c0r0p0t0?0s0r2D9Q1)1+2J0#0N2/2M0j0r1*0.150Z2M0.2j0r0t2)0r0o0K0t1*0r0d0q0s0o0J0r0O9B0(0t0w0r0A0N234x0.1e9M1*0t0j9)0R290*0u9B0)0r2=4w0F0R0N0F0s2j0c0.9D9F0 9^3f1Y040O0p0r9Y9!0p2H9K1f9:1+9{9}9S0K37an2J0R9|9$0;9=2X0t2Oaf9W1+0G009*2M9`0p0M2i2v0F0c0n9=9R0K0G9_9L0r9Z0j2G1+9.0k0q0taj9N0R2N9%002=0(a_aL0s1e0Jbn1vaE0 bq1G04bn0J14aS0,9K8Y0r2X0y0.9ra?9_9X9Z0;9#9%1+140taiaSa/0Ka{0M15ao9Jb10j0p0E0s0(a^9M9Y1YbWb+1+9,0caU250I0N2Ma_aI290.9_0E0;0M1oawaI9B0R0s0j0u9^am9M28b`23bEa2b}9%aHaJbLbkbm1E3f0Ybsbs1CaGaIbK15co1fa8b$1+ceb20*0EaQa=0,b50r0ub#0Fb)c4a-b32Ga*2K2M2Oa+0/0I0p9A0r0q0Z0k0)bvcq90ct0sbubnbx0.bzb1bD0.1N0d2hbHc!9?0rb`0#a:4w1jb=c5cka$0ja(0ccW2Ja-bT9`2=3va|1j1*b*aN9%9}bba#cmcz2H0Jbpc=90aC9l0ha?a{9(cxaK2H0.0idsaP9`9|0.0x9Sb92L0+c40T2X1+cUb=0.d82v9=0t2G9Cc/4z2.3{1:1X1Z1#9m3s2s2j2l0}2y0X0Mb40E9M0C0Pa90F4G4C9m2 4F92d{746(6u8!5W8l8j5#8b8A2f5,4@8i7D8k8_89528J060reDeEeFeD7.5,6G8?89eBeGeO8S8q7seNePeI6d6N8(eweTePeHez7c8$7Mev3s5,5.eY7T8.ez5Je!e#eV0}6VeL7@e@eUe%8seQ8Bexe|6P5,6fe/7~e;7@528 e^898 7v8E6(8Y0jele)8a4!eF8@71e~e 628e8g7Sfa3Re#fffc7cfb6?7:0I8=eheRfGeweA4!eCfCeO8/7:7R8}6QfN7WfefSeGfs7 7d4ffDfH7i8;fzfMfBf$e$fE4+fofufCfU7i0dfKf(8RfRf?f25;fF7$8e7kf:f3fZ8T6nf{fr8L7:8Ngb8If=f|e=gnf%fg8 1veg949j4A900(0*0,0o04.
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

.128013[4tf)+2r3sao iug0m1]Ppnlhe=cy:v(wS/bdk050L0A0d0l0o0y0k0n0C0y0l0k0k0B010d0o0w010406050k0p0s0s0l0i0D040I0m0y0p0%0m0x050J0.0:0=0@0,0w041017051a0J1a1c170,0L0o0F0V0X0Z0#0z0o0q0z0y1q0z0d0*050Q0K0y0A1l0Y0!011p1r1t1r0d1z1B1x0d0K0m0L0@1y0i180d0z0V0`0k0w0l0x0#0h011D1n010e0S0A0x0l0s0A1x1#1%1,1F1/1B1=1@0*0a0n0v0i0m0w0m0k0o0}0x0n0O1Z0i0i0A0C2c101`0x180J1X2p0d1V1U1W0L1|0#1t0x1;291x1i1k0W1E2z0o2B0x1R1j1x0w2i182n2p2T0-1$2d2H1-2M0i0;0y0*0t2m2X0+2W1{2Z1F2#2%0*0h2+1%2-2n2y012=0l2(040j2_2o0,2|2:0#2 310c342p2Q0A2p2F2s0L2w2}0C1R1^183i1b2R2.2o3d053n0O2S2X2}0M0*0O0e3w371m1F0H0*0n3H3B382~0e0*0Q0S1B3O2/3J0#0)040G3X2Y3Z2~0*0=0K2i3(2}3#0f0E3d060n3`3N3I2I013D040o3G112,3|3P3*0x3,0i3.0A3d463Y3~0m0*0B0B4e3u3;0*0G3?3^3{4t4f3)3~402i0d0p0i0 442`4v2}0s0o0*0r4s3{4n3Q4y0P4B4D2T4G3Q4I2)4m3}1-4i040g4Z473~49043U0y3W4E3v4!1F3#3%4;3A4g2!4a4c3:3Q3#0b503*4X044L4`4O3*3#0u0f4)4|1F4$4(4`4V483T0R4/4d594?3!4p544+4~3/5r4*1-525v1-562^5z5g5t045d3^103y3g193t0J3r2q3k102t2s1Q1S2s0l1A5P5S1j2-5S0P5o0k04.
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

.128013[tf4)+2r3,sao iug0xm1]Ppnlhe=cy:v(wS/bdk050N0C0c0m0p0A0l0o0E0A0m0l0l0D010c0p0y010406050l0q0u0u0m0i0F040K0n0A0q0)0n0z050L0:0=0@0_0.0y041219051c0L1c1e190.0N0p0H0X0Z0#0%0B0p0r0B0A1s0B0c0,050S0M0A0C1n0!0$011r1t1v1t0c1B1D1z0c0M0n0N0_1A0i1a0c0B0X0|0l0y0m0z0%0h011F1p010d0U0C0z0m0u0C1z1%1)1.1H1;1D1@1_0,0a0o0x0i0n0y0n0l0p0 0z0o0Q1#0i0i0C0E2e121|0z1a0L1Z2r0c1X1W1Y0N1~0%1v0z1?2b1z1k1m0Y1G2B0p2D0z1T1l1z0y2k1a2p2r2V0/1(2f2J1/2O0i0?0A0,0v2o2Z0-2Y1}2#1H2%2)0,0h2-1)2/2p2A012@0m2*040j2{2q0.2~2=0%31330e362r2S0C2r2H2u0N2y2 0E1T1`1a3k1d2T2:2q3f053p0Q2U2Z2 0O0,0Q0d3y391o1H0J0,0o3J3D3a300d0,0B0m0~0C0q0i3Q2;3L0%0+040I3$2!3(300,0@0M2k3-2 3*0f0G3f060o3 3P3K2K013F040p3I132.413R3/0z3;0i3?0C3f4b3%430n0,0D0D4j3w3_0,0I3{3}404y4k3.43452k0c3!11492|4A2 0u0p0,0s4x404s3S4D0R4G4r421/4M2+4X4c4m0,0g4$4l2$0M0,0?0t3^3S3*3,4I3x4Y2?3V3X0c3Z3#4_3C4,1H4@4=4d4f4h57433*0b5b4Z4N044P524S3/3*0w0f0k4+4B2$4}3Y3!5f554u5x3b593@5k4{3)0,5e5E4%5g2_5A015n0f0f3}123A3i1b3v0L3t2s3m122v2u1S1U2u0m1C5V5Y1l2/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

.1280135[tf4)2rF3,sa!o iug0x8m1]P6pnl7h.e=cy:v9(wS/b_dk050V0I0d0n0r0E0m0q0K0E0n0m0m0J010d0r0C010406050m0s0x0x0n0i0L040R0p0E0s0;0p0D050S0{0}0 110_0C041a1h051k0S1k1m1h0_0V0r0N0)0+0-0/0G0r0t0G0E1A0G0d0@050!0T0E0I1v0,0.011z1B1D1B0d1J1L1H0d0T0p0V111I0i1i0d0G0)140m0C0n0D0/0h011N1x010e0$0I0D0n0x0I1H1/1;1_1P1|1L1 210@0a0q0A0i0p0C0p0m0r170D0q0Y1-0i0i0I0K2m1a240D1i0S1+2z0d1)1(1*0V260/1D0D1~2j1H1s1u0*1O2J0r2L0D1#1t1H0C2s1i2x2z2%0`1:2n2R1`2W0i0~0E0@0q0y2w2+0^2*252-1P2/2;2?0h2_1;2{2x2I01300n2=040q0k342y0_372~0/3a3c0q0f3g362+383m2?0b3q3i3s3k390p2:3b2?0B3x2|2,1w2 3C313d0F3H3j3K3l3M3E3d0w3Q3z3S3B3D3n0O3Y2}3!3u040y0u3)3J2S3#3N0y2^1b2`3y3*3=3,0y333`353|3;2.3U3c0y3f423h3I3t470@0y3p4b2z2!0I2z2P2C0V2G380K1#221i4o1l2#3I2(2`054t0Y2$3Z3=0W0@0Y0e3q4d3A0Q2?4N3R3~0e0@0+0i0t0I0s0i4S4H1`0?040P4%3}2.0@0 0T2s4-451P4*0g0M3x0q4~0q4O3!4J040r4M4j504T4/044;4?57513=0p0@0J0J3q584(4_0@0P4{4}4 5t5f1`532s0d4#195e595o040c0z5s4~5v2 0@280I5l5K0/5h045k5C5n3l0@0j1}4@384*5q5I5m4.5L045N5#3A5S0H5/3+0@1~5.4j5Q015%5?3~4:0i4=5O5{5D0/4`5)5|0D0@2s0{0E0!0d5P66015S5U2%5*4^670@5G696j530Q1z1L6i5W6k4Q042W6h5V5+5X5-5!656A5;5 5a0I0m0d0U0N0r0Y6O5E5q4|4j065t5u6j6b5b6z6H6k5i6,6p395M6K2)6j6N6L6-6*4L6@4C6j5%0g5)6(6A53556:3t4:795:0@0o6m2`6o5$5p5r6#6%7n7i3A6*0m0n0t6X6q040l7c5@040v7v5}0@7y6G6;7r0n0V7z5g6/7H7a6+7m7o756|6c6Q0s6f0n6F6^6M0@5=6{7I4:0C0C1~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{8l6t767W5z0i5B6n8p046d7Y6g3H0S4E4m1j4z0S4x2A4q1a2D2C1!1$2C0n1K8Z8$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

.1280135[4})2R,a! iàm16l.e:;US/dktf{+Irj3sogux]PpONnh=céyvêD(wq_b050z0t0B0j0m0r0J0l0W0r0j0J0J0V010B0m0Q010406050J0M0o0o0j0G0Y040x0K0r0M0~0K0T0l020j0o0Q0v0l0h0t180G0(0M0t0J050y1517191b130Q041z1G051J0y1J1L1G130z0m0Z0?0^0`0|0U0m0L0U0r1Z0U0B11050.0*0r0t1U0_0{011Y1!1$1!0B1,1.1*0B0*0K0z1b1+0G1H0B0U0?1e0J0Q0j0T0|0g011:1W010C0:0t0T1m0t1*2b2d2i1=2l1.2o0o2q040a0l0P0G0K0Q0K0J0m1h1j0,290G0G0t0W2L1z2s0T1H0y272X0B2524260z2u0|1$0T2n2I1*1R1T0@1;2+0m2-0T211S1*0Q2Q1H2V2X32142c1j2?2j2{0G180r110p2U3612352t381=3a3c110g3g2d3i2V2*013n0j3d040I3r2W133u3l0|3x3z0d3C3t363v3I110b3L3E3N3G3w0K3b3y110q3L1I301z2;2!0z2(3v0W212A0+1S1H2 0t313h3$3/0,3`3k1V1=0A110,0C3$3F410|0%110l473U493w0C113^2l0N0t4e402@0110040$4o374g0T11190*2Q4v3v4s0f0u3S0l4J4d484q43040m461A3h4L4f4q4y044A4C4S3s4U4p2j0K110V0V3L4%4w4q4s0$4G4I4K4_3j4:2j4O2Q0B0M0G0T4.4{4E110c0O4^4J553V4O0t0;4n4#2W5c4g4s4H5i124_4`4M39110J0j0L4D3V4s0i545s3m110Z3y0t515y5l115B5o4/3O5u0j0z5C4V4)4+5U4(5E4Y0G4B5h32065q4K5k4N114 51535O5-2j4s0c5K4W5F5H5J5o5@1=4s595?5D0|4*040E5Y4|5!4k0m4m5{5^114u60663w5R5x6l5V62110f6b3v686a656r3H4j2Q4l5(3{6m4=6h5!5v5T6q5Z0|4F3S1z3}3_3%6U0y3*1z0B3,6Z2$2Y20222!0j1-6W3*1F3 6c0|2Q0o0)0C0j0A0t0)0U0I111r1t1v1x0l5n341M3i1G0F0r0l1x0B0l0n0l2{0B0t0G0l740l0^291n1.0N2K0X7e1j7l1n0=2N0W0-7l0l0j0Q2 0K0W0U1/0T007f0l2c0=2G0~3c0t0i7S0M0m0J1v001i0l1g0:7$1/0,0=3/0T0W0j0B0X2o2L7C1/1$0J7l0J0s1I7a040w2-7S2I2J0*7-7_89510l0X0Z2K7m0?5f0j7e800l0z007,7 8l0M880C1i2S0m7*2d2-4m8r0t0Q7#0=0^740r1.0l7*0o1g7m0/7g0B0K0M0H8Y0G8L8o0o0!2z7q7$7l0s0l0#2d7;1/7@0J7Z7r3/7t0t7v8e2n0l7A0Q0=2l2o8P7R610|192K0U187l0N11090$099f0U7@0r0D0R0e0$0S0f096u5O0$2H8g9a019c279f8~9i9t9w4.5G1.517C8=7q004Z0t0f83791Q1S3v1@1#1%1)3@3(78346T045r6A014O456J4a4c9@4h6C0t6E9`6I6N6=6n5#5%9 6t773h5*5+5P5d5/0-5;6v3V4X0)6e4m0)0j0M0Na64t9`4X9Tar5N32ac5L04589x5)aa5b6m9=9}9`4b9.at4i04ak6D6f6}aoaqa156asaWai4z5$4!346H5Mah4x110;0Bar4@5oaF5q9C4O4Qa+5|a4a%4T9C680k4-6z6O4r6ja;5)aba@6m4X5v6pa(9:5Aa{5t049M5I0Gawbj6K5Sbq675Xb4a2aua$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/1K040S0K7l7n7(0:0l150C2l7g2N0z0X0Q0^7E7n7r1_88059-a.0s7I0QbO0$bm519x9-7Z2c7n0Gc%3X7g7i0r000m7t0X2z0T0.2L8H958A7|4d9-cL9~0y9-8Q0Md7cx2_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

.1280135[4})2R,a! iàm16l.e:;US/dktf{+Irj3sogux]PpONnh=céyvêD(wq_b050z0t0B0j0m0r0J0l0W0r0j0J0J0V010B0m0Q010406050J0M0o0o0j0G0Y040x0K0r0M0~0K0T0l020j0o0Q0v0l0h0t180G0(0M0t0J050y1517191b130Q041z1G051J0y1J1L1G130z0m0Z0?0^0`0|0U0m0L0U0r1Z0U0B11050.0*0r0t1U0_0{011Y1!1$1!0B1,1.1*0B0*0K0z1b1+0G1H0B0U0?1e0J0Q0j0T0|0g011:1W010C0:0t0T1m0t1*2b2d2i1=2l1.2o0o2q040a0l0P0G0K0Q0K0J0m1h1j0,290G0G0t0W2L1z2s0T1H0y272X0B2524260z2u0|1$0T2n2I1*1R1T0@1;2+0m2-0T211S1*0Q2Q1H2V2X32142c1j2?2j2{0G180r110p2U3612352t381=3a3c110g3g2d3i2V2*013n0j3d040I3r2W133u3l0|3x3z0d3C3t363v3I110b3L3E3N3G3w0K3b3y110q3L1I301z2;2!0z2(3v0W212A0+1S1H2 0t313h3$3/0,3`3k1V1=0A110,0C3$3F410|0%110l473U493w0C112_2l0N0t4e402@0110040$4o374g0T11190*2Q4v3v4s0f0u3S0l4J4d484q43040m461A3h4L4f4q4y044A4C4S3s4U4p2j0K110V0V3L4%4w4q4s0$4G4I4K4_3j4:2j4O2Q0B0M0G0T4.4{4E110c0O4^4J553V4O0t0;4n4#2W5c4g4s4H5i124_4`4M39110J0j0L4D3V4s0i545s3m110Z3y0t515y5l115B5o4/3O5u0j0z5C4V4)4+5U4(5E4Y0G4B5h32065q4K5k4N114 51535O5-5t4P0T4l5(3{5D0|4=5K4W5R5x5o5@1=4F5Y4|1=4*040E6956040c615^5G1.5J655~4r11595?6p6c6e6t5V5!4k0m4m6j67114u6o6y3H5R5T6H5Z5 110f3S1z3}3_3%6U0y3*1z0B3,6Z2$2Y20222!0j1-6W3*1F3 6a0|2Q0o0)0C0j0A0t0)0U0I111r1t1v1x0l5n341M3i1G0F0r0l1x0B0l0n0l2{0B0t0G0l740l0^291n1.0N2K0X7e1j7l1n0=2N0W0-7l0l0j0Q2 0K0W0U1/0T007f0l2c0=2G0~3c0t0i7S0M0m0J1v001i0l1g0:7$1/0,0=3/0T0W0j0B0X2o2L7C1/1$0J7l0J0s1I7a040w2-7S2I2J0*7-7_89510l0X0Z2K7m0?5f0j7e800l0z007,7 8l0M880C1i2S0m7*2d2-4m8r0t0Q7#0=0^740r1.0l7*0o1g7m0/7g0B0K0M0H8Y0G8L8o0o0!2z7q7$7l0s0l0#2d7;1/7@0J7Z7r3/7t0t7v8e2n0l7A0Q0=2l2o8P7R660|192K0U187l0N11090$099f0U7@0r0D0R0e0$0S0f096Q5O0$2H8g0S0l6l5I8$8r8=7q004Z0t0f83791Q1S3v1@1#1%1)3@3(78346T045r6I014O456D4a4c9,4h4j5`6B5|3s9a6q4t9/4X9L9/4F773h5*5+5P5d5/0-5;6f3V4X0)6A4m0)0j0M0N9 6F9|4z5$4!346p5Aaa5L6h0O9x5)a35b6p9*0t4Raq9(4b9$9|4i04ad9=afahaj6M6=9`6GaF6N3wan5%ak045N32a54x110;0Ba!4@5oaz5q9_4O4Qat625#aZ6xaW6c0k4-a|aS4=a.5)a4a;6p4X5v64aVb25Ma^6k5H6nbc6ga$4T9_b95Sbf6b5Xb15Qa`apa2b69%aWacae6}aPa!aU5}9(bobbbHaWasbtaba*80a-5abybnbQa,aR3v6c9ObjbP4Y7J2n6Lb$aubG9^b85Fbh0GbSa/by5,b:aLbCagaibFam045vb+bLbda#bq6J04a+b@a%b6a:bzaS4~a852c8aXcabRa/6S3:2X3^2X6/1K040S0K7l7n7(0:0l150C2l7g2N0z0X0Q0^7E7n7r1_88059#a+0s7I0Qb*0$9E519x9#7Z2c7n0GcX3X7g7i0r000m7t0X2z0T0.2L8H958A7|4d9#3^5{cq3~8Q0Md1crcFd40y9#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

.1280135[4})2R,a! iàm16l.e:;US/dktf{+Irj3sogux]PpONnh=céyvêD(wq_b050z0t0B0j0m0r0J0l0W0r0j0J0J0V010B0m0Q010406050J0M0o0o0j0G0Y040x0K0r0M0~0K0T0l020j0o0Q0v0l0h0t180G0(0M0t0J050y1517191b130Q041z1G051J0y1J1L1G130z0m0Z0?0^0`0|0U0m0L0U0r1Z0U0B11050.0*0r0t1U0_0{011Y1!1$1!0B1,1.1*0B0*0K0z1b1+0G1H0B0U0?1e0J0Q0j0T0|0g011:1W010C0:0t0T1m0t1*2b2d2i1=2l1.2o0o2q040a0l0P0G0K0Q0K0J0m1h1j0,290G0G0t0W2L1z2s0T1H0y272X0B2524260z2u0|1$0T2n2I1*1R1T0@1;2+0m2-0T211S1*0Q2Q1H2V2X32142c1j2?2j2{0G180r110p2U3612352t381=3a3c110g3g2d3i2V2*013n0j3d040I3r2W133u3l0|3x3z0d3C3t363v3I110b3L3E3N3G3w0K3b3y110q3L1I301z2;2!0z2(3v0W212A0+1S1H2 0t313h3$3/0,3`3k1V1=0A110,0C3$3F410|0%110l473U493w0C11150C2l0N0t4e402@0110040$4p374g0T11190*2Q4w3v4t0f0u3S0l4K4d484r43040m461A3h4M4f4r4z044B4D4T3s4V4q2j0K110V0V3L4(4x4r4t0$4H4J4L4`3j4;2j4P2Q0B0M0G0T4/4|4F110c0O4_4K563V4P0t0;4o4$2W5d4g4t4I5j124`4{4N394j0j0L4E3V4t0i555t3m110Z3y0t525y5m115B5p4:3O5v0z5C4W4*4,5T4)5E4Z0G4C5i32065r4L5l4O115052545O5,5u044k4m5%3{5D0|4?5K4X5v5x5p5?1=4G5X4}1=4+040E685Q5^0M4l0m4n602j5 645}3w5R6l66110f6e3V6b6d5=6p4t0c6s3H5F5H5J6o5U6t045a5p130y3}3_3%6S0y3*1z0B3,6X2$2Y20222!0j1-6U3*1F3 690|2Q0o0)0C0j0A0t0)0U0I111r1t1v1x0l5o341M3i1G0F0r0l1x0B0l0n0l2{0B0t0G0l720l0^291n1.0N2K0X7c1j7j1n0=2N0W0-7j0l0j0Q2 0K0W0U1/0T007d0l2c0=2G0~3c0t0i7Q0M0m0J1v001i0l1g0:7!1/0,0=3/0T0W0j0B0X2o2L7A1/1$0J7j0J0s1I78040w2-7Q2I2J0*7+7@87520l0X0Z2K7k0?5g0j7c7~0l0z007*7}8j0M860C1i2S0m7(2d2-4n8p0t0Q7Z0=0^720r1.0l7(0o1g7k0/7e0B0K0M0H8W0G8J8m0o0!2z7o7!7j0s0l0#2d7/1/7=0J7X7p3/7r0t7t8c2n0l7y0Q0=2l2o8N7P650|192K0U187j0N11090$099d0U7=0r0D0R0e0$0S0f096v5O0$2H8e0S0l5G1.527A8:7o004!0t0f81771Q1S3v1@1#1%1)3@3(76346R045s6K0|4P456E014b9!9*0T4i6g6i6k6J5Y5~114v9@6:6q5!5$9*4G753h5)5*5P5e5.0-5:6w4y110)5_6j6{0j0M0Na19`9.4A5#4#346B5Mac4=580O9v5(a55c6p9(0t4Sas9$9+4c9.9:af6h5`0)ajal9|574uao9 ar5|aI5Aav5@0;0Bam044^6Oa6a74g4P4Ra$5Z9Ja?0|6b0k4.6Aa!9`a,5(a.9#9^9~0J5wa*5N32a/61049C5I0Gb9a_b60j5Sa~b56ba}bb989~a^a-b3aCaI4YaN9=aiaka*9{aHb54Yb763bG9}a#bn9}4Ya(a*aza4bwbxbHaeag4naQbDaT5zanb%ad5^blbibO6fbRb*awa+5bb3bsbQ7~9*6b9MbL6f7G0Q2nbmc0b(aVb=5@bf6Ic65Lb@bv5*bs4 aa53bjb{a)6O1z9Z6T2X6-1K040S0K7j7l7$0:0lag7e2N0z0X0Q0^7C7l7p1_86059Za(0sc2c40$cb0G9v9Z7X2c7l0Gc23X7e7g0r000m7r0X2z0T0.2L8F938y7`4d9Z3^5`cq3:9!8Wc}d22_d06Qd29M1P3)0-0/0;04.