En Travaux
moyen
Autour des arbres binaires (2)
Différentes représentations
Cet exercice demande d'écrire les méthodes calculant la taille et hauteur d'un arbre binaire.
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 à l'aide d'une classe AB ne possédant qu'un seul attribut racine .
Si None est affecté à cet attribut, alors l'arbre binaire est vide.
Dans le cas où l'arbre binaire n'est pas vide, son attribut racine est un objet de type Noeud qui a trois attributs :
valeur qui est la valeur portée par la racine ;
gauche est un objet de type AB et représente le sous-arbre gauche de l'arbre ;
droit est un objet de type AB et représente le sous-arbre droit de l'arbre.
Les classes Noeud et AB
class Noeud :
def __init__ ( self , gauche , valeur , droit ):
self . gauche = gauche
self . valeur = valeur
self . droit = droit
class AB :
def __init__ ( self , gauche , racine , droit ):
if racine is not None :
if gauche is None :
gauche = AB ( None , None , None )
if droit is None :
droit = AB ( None , None , None )
racine = Noeud ( gauche , racine , droit )
self . racine = racine
def est_vide ( self ):
return self . racine is None
def __str__ ( self ):
if self . est_vide ():
return "∅"
else :
return f "( { self . racine . gauche } , { self . racine . valeur } , { self . racine . droit } )"
Créer un arbre binaire
Les deux classes Noeud et AB décrites ci-dessus est déjà importées dans l'éditeur.
Utiliser ces classes afin de représenter les deux arbres binaires ci-dessous :
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
Par commodité, on n'a pas représenté les arbres vides.
ab_int sera l'arbre portant des nombres entiers, ab_str celui portant des caractères.
.128013s3o_;8èbcdufvgI/0lyq n7ABaêpS.r1Lmeh,(P2=4:Njtki95Rx)é6050k0J0U0A0W0s0b0v0j0s0A0b0b0P010U0W0C010406050b0l0I0I0A0F0t040D0d0s0l0{0d0w0v020A0I0C0f0v0Z0J150F0u0l0J0b050q12141618100C041w1D051G0q1G1I1D100k0W0n0:0=0@0_0K0W0o0K0s1W0K0U0~050+0i0s0J1R0?0^011V1X1Z1X0U1)1+1%0U0i0d0k181(0F1E0U0K0:1b0b0C0A0w0_0O011-1T010m0-0J0w1j0J1%282a2f1/2i1+2l0I2n040a0v0N0F0d0C0d0b0W1e1g0)260F0F0J0j2I1w2p0w1E0q242U0U2221230k2r0_1Z0w2k2F1%1O1Q0;1.2(0W2*0w1~1P1%0C2N1E2S2U2 11291g2:2g2^0F150s0~0v0G2R330 322q351/37393b0O3e2a3g2S2%013l0A3a040v0c3p2T103s3j0_3v3x0v0Q3B3r333t3H3b0Y3L3D3N3F3u0d383w3b0%3S3h341S3k3X3m3y0x3$3E3)3G3+3Z3y0g3/3U3;3W3Y3I0X3`3i3|3P040G0r413(2;3}3,0G3d1x3f3T424a440G3o4f3q4h49363?3x0G3A4n3C3%3O4s0~0G3K4w2U2|0J2U2.2X0k2#3t0j1~2x0(1P1E4G2~3f3L054O0)4V4i360~0A0i0e4v2 0v4y3V0d0~0P3L4.3:4j0~0y0z4X4_2g0}040M4~3{4a0V0j0~0S1f0J544$1/510L4@4/3|0I0W0~4,4W4 5f0~5h4E4^552g57595b5d4q5r040#483O4(4*4D4-5j4a4;044?5u5M4%044|5B3t51534E5S1/5y045a2*5W3V5g5i5q0_5l0~5K5p5w5D5t5L5/015%5)5c5!5|515F4E4p5H044)0e3R5R5|5O5Q5{5^3G4{4}616h015Y5+3|5~5A6l5e0_5-6c6m5;046b31625s5.6m6r5*6t5C6v0~642 663V0w5I0e4e6g6u016e6F6W6R5U6k6C6m6o6J67695o3q5#6L045`3f5v6W6z6U5@6W6w6V6K5}585(6s6(6}6M5G6Q6S4m6 3t6Y6x6!6j6p4a6*75706#695?6/6D6=6Z706z7b6|706~6@6:3u6S6B7x5X77657B7n4*2?0U7t7d4=7O796$7i500~5Z7l6,4*6{7q6)6E7f7u5m04476+5,7(7c7S697w7$765E3S6P436S0K7R3|7e7;7}7T7.3|7k7F3V6H607Y7/7s7)3t0b2d041:017U5_8056725 8n6;6N4g7J6S0V8p2g827A5|6#5V867j7W8t715z6I8d877:8D6m8i0~5}8m8H7V8f838q8M8c898P7`7I8E6S8%3q6^708C8/8x858O8I528K7K0e7 8X8o8g3V8T8k2n8K7z8?5|8b977H6O8@690m8A1/8=2T8:678G8_8Y7X8(8#738N9s8Y6?998S8j2h8W9p918!5T698z908u7884690i9i0_9k3y8@9o9w5D9r7^709b9K6n8Q9z6W94010i9D9W6;9y9l9f4*8.2T7B639M4`684*0j9Q6X7Q92849V9Z7G8{9$8}9h9$989=5|9+589c8Z8R6W9#9E9L8+6m8}0b2Ya19S9m7Sa69_7r9YaAar6S9Pad9(af9A8U0A9.a78e9;9T8,9~0ea0aH8*9e0q4Z4H1F2}1w4J1w0U4La*2Z2V1}1 2X4)1+4I4S1C4#702N0I0e0m0A0V0J8~0c0~1o1q1s1u0v0R4X1J3g1D0p0s0v1u0U0v0A0l0@0W0v2Ebp1*1,2K0k0$2:2N0F0v1+0/160i2Nbj1g0l2*0v0b0J0l1+0v0m0d0W0b0E0v0Hba0)0l0!0v0I0$244P0/1fbl1+0l0FbE0n2a0+0oba0*0v2?4O0w0n0$0w0W2k0U0/bcbe10bP3g1Z040H0A0vbxbz0A2IbI0vbK1,bSbUbr0J38b{2K0nbTbB0=bM2Y0l2Pb:bv1,0s00bFbHb00j2j2w0w0U0LbMbq0J0sbQbk0vby0F2H1,2k0v0T0d0lb@bm0n2ObC002?0)cPcj0W1f0E1wcc10c}1H040Ed215cq0-bjat0v2Y0h0/cL2jcgbvby0=bAbC1,150lb?cqcJ0JcR0j16b|bicX0F0A0C0W0)cOblbx1ZdtdE1,2Natcs260K0$2NcPcg2a0/bQ0C0=0j1pc4df0/0n0W0F0obPb`bl29dQ24dbbZdTbCcfchdic^c`1F3g0qc c 1Dcecgdh16d{1gb)dz1,d.cY0+0Cco0AcM1Z0U1,0ody0wdCd!cHcZ2HcE2L2N2PcF0:0K0Ab90v0d0i0T0*c{c8c|0WcbeLd20Ed40/d6cXda0/1O0m2ieieybN0vdQ0kbH4O1kekdfd@cA0FcC0Ueu2KcHdqbR2?3wcS1k1+dDcl1Z0bc,czd_e62IeIc 0qcaa`0pcMcRbDe4ci2I0/01c%cnbRbT0b2e2Eb:dyc3dR0B2Y1,esek0/e*2wbM0l2Hbbd}1N1P3t1;1Y1!1$a{3t2t2k2m0~2z0D0jc!0Cbl0N0tb*0w4X4U3%304Wa!fS7=7LcPava39G3k7haWaC0 0vg1g2g3g19U6%9/9%a96Og4gcg4g6ajf 7Bang8aeaR6y7+6.aD7_aQax6q8r74gk6MaQ06gdgBgt4a6`ajgzgCgdgigv9vaO8)gHgIgD8Y0#gPgI7B6z7-aog9gUgCgff~3SgQg3g%gZ88gN9t8saWgsgW7+7pgq7yaIgmamgL9^f=8)gTg)g*g55|7vgGh4h5g,gxgag8gjg/9xa16z7Ehh9Fal9!g ajh365g*9`9d4ggBhvaX4g7|9}69at0Ff_5Pa18Fg7hm6;f gAgQhchMg9hOh5g2gK8$h9hthVgR1/0b0G0~000i00hZgbh#hRg`a8hUh#g+aSazh18`gh9ahqg=a1h(h*0Kh-i1a4g:gwhS63g#h^7B9+96i7h/h^h66Gi0g-g|hPhVhzhsijg$7rithxhQag9BaMh.iygVh`hLh=8eh@iriGgghaikhX9uh0hzidh:agh)04000mi6ioak4oikhWiMg(9$hgiIgOi2iX000Vi#hdg?h hYaWixi(iV7%5EiUiF8Si=0ji^ibipiei{iRiDi j47_8vjfgcis3$aZ4P4Fa%0q4J10jr0*0,0.04.
Taille
Compléter la méthode taille de la classe AB . Cette méthode renvoie la taille de l'arbre binaire représenté par l'objet en question.
Exemples
>>> vide = AB ( None , None , None )
>>> ab_1 = AB ( None , 1 , None )
>>> ab = AB ( None , 0 , AB ( ab_1 , 2 , None ))
>>> vide . taille ()
0
>>> ab . taille ()
3
.128013.8709s3o_8bcdufvg/0ly n7ABapS.r1me,(P2=4:+}Ntwki95h{)6050j0E0P0x0S0q0c0s0i0q0x0c0c0J010P0S0y010406050c0k0D0D0x0B0r040z0e0q0k0?0e0t050o0}0 11130{0y041c1j051m0o1m1o1j0{0j0S0m0+0-0/0;0V0S0n0V0q1C0V0P0_050$0h0q0E1x0.0:011B1D1F1D0P1L1N1J0P0h0e0j131K0B1k0P0V0+160c0y0x0t0;0I011P1z010l0(0E0t0x0D0E1J1;1?1{1R1~1N21230_0a0s0H0B0e0y0e0c0S190t0s0!1/0B0B0E0i2o1c260t1k0o1-2B0P1+1*1,0j280;1F0t202l1J1u1w0,1Q2L0S2N0t1%1v1J0y2u1k2z2B2)0|1=2p2T1|2Y0B100q0_0s0C2y2-0`2,272/1R2;2?2^0I2{1?2}2z2K01320x2@040s0d362A0{39300;3c3e0s0K3i382-3a3o2^0U3s3k3u3m3b0e2=3d2^0Y3z2~2.1y313E333f0u3J3l3M3n3O3G3f0g3S3B3U3D3F3p0T3!2 3$3w040C0p3+3L2U3%3P0C2`1d2|3A3,3@3.0C353|373~3?2:3W3e0C3h443j3K3v490_0C3r4d3t3 483(4i3y4l464g4p3/3I4s4f3C413R4y3T404h3/3Z4D3#4F4v0C3*4J4n3N4v0I3;4P474R3P0I3{2)4t4A4G0I434#4z3-4(4c4+4E4o4Y4k4:4K4=3X0I4r4^4Q3V4S4x4~4W504Y4C534u4Y4I584%4S4O5c4-4v0d4U2+1p2%1c2R2E0j2I3a0i1%241k5p1n5n5l2+5u0!2(4_1R0R0_303s4,3@0Q2^5L4;310i0_0O0e0E0k0j5Q5G0;0^040L3z0s5+0s5M1|5I040!0l5!4 015O3f5@541}0D0_0f0f2W2n615|3a5%0G663C0h5%0c0E0q5?4l5.1R5%0F3s5-5R3n0_0n0x0k0i0V0E6a3$6l6n6j6q040m3d5X0B6y3@6A4l6o5#3b0_0j2i2n6J1|5%0X5)4s5,6!6N5^6c0_6e6g6U1R0e0_0A6,6D6s6u6w6B6p016.040J6_6O0t6r6t6v6x6Z6#5+6C016(046*6h2+6`6|6:6i6`716E6G0k6I6M796|6~7q7k0_6F1N7o5*776$5}7b7d6;6{6/7G7l6R0e6T7u6O7s6 5^7K6S0P3z064$3$5:5K7j6O5`5-7$7S5T040v0w7G5%6Y4#6!795:5=7G7(7G0l5 0461630P657*5}687G7E6f7e2|796L2)7C3v726@757f6O8e2|8g4A0_0B0x0i2W8k8c6`8n378p3-6Q7U7:0_6X7A777^0_0S8b8A797l8s8u2N7R5}0e5`0S0c8U3a8W0_2Y7V7O5^0R7,5V8T85670_7=3}7B6#8K048M8!8q046?748}3$8$8{8Z8*5}8,5U1a8w378d8=8I8^8_7v8 736^978#0_7t8f8P0_7.8F04698:3C99048.9c2A9e046m9n9z8-9b9v9H9r6`9A9C9v0X9g8^8`8|9I8C5;8E9Y3@948Y923@9Q9L9y6z9f769h9i708D7M8)9O7P9p9*2:9t7/9.6K0_9x8l8+9K8/a6860_9N8o7^a89D5F5^8z2A8B9+ag9S9U7B9s048R8v9~6-9}9$9 9B5W5Y9va58x9@9k8j9Maw6Daua9aGajacaL6P9!9_ap9;9?6%6d8a7G7h7J8r8tavazax6}aS8Qa*aO45067@9P6Q0E8N9E6`7|a22:0l0_0E0c830m0S0!aE88a!6+b06k8G8?459Va_at0#7o1ba,0;89bdaa9o047ibt8~aNaham1|9(969{a79aa=3ja@5,8`7`be0;a bx3-b2040$0(1NbabO7abca|aiab048HaXa^6O5:9XbF7Db#a$7IbZ7lb4b6b8ah9F0Gb*7?9=bB5H8rbm0Bbob:3a0D0S0_5k8@arbk2u0PbnaScb4iaS6|0MaSbrb$7rb@bR40a)8Sb}7gcvaP5}7l909mcwbCcC9d9jbV0qbXbZ689Tbp7H04cqcTcsb?bva(ata;cA9|c!b^9^7NcIa-bwcD8hbU0%cOc(aQ9wcS4#bK78bkbNc.bP5PbZ7~600fb50B84d20187bZcYcQbgaqc b-8Lb$c3bqb=bZa%c+04b`0fb7b9dhc{bh3jc2do015:cickcT0c1_04010b01djdE5:6f6e9vdB0`dD8`dHc7aS0c0x0_ct6`dK0_01aFcL6O2m0_0Wbb6)a#drcKa}aHbzcZc:d:7S8i91bZd=040N7Gd,9G7)dce7d@dfdqdcdsdca:cze0c#7x6Heacce8eadL0Fedc;3Cefd^7cd`ejd|b%c=d d{c*elc,9`ez3$e7e9e6dL0XdP4y0o5D0E2B2$e!5o1v5q2E2G2C1$1(2E0x1Me%0o5p0{e@0#c@0c04.
Hauteur
Compléter la méthode hauteur de la classe AB . Cette méthode renvoie la hauteur de l'arbre binaire représenté par l'objet en question.
Exemples
>>> vide = AB ( None , None , None )
>>> ab_1 = AB ( None , 1 , None )
>>> ab = AB ( None , 0 , AB ( ab_1 , 2 , None ))
>>> vide . hauteur ()
0
>>> ab . hauteur ()
3
.128013.8709s3o_8bcdufvg/0ly n7ABapS.r1me,(P2=4:+}Ntwk{i95hx)6050j0E0P0x0T0q0c0s0i0q0x0c0c0J010P0T0y010406050c0k0D0D0x0B0r040z0e0q0k0@0e0t050o0~1012140|0y041d1k051n0o1n1p1k0|0j0T0m0,0.0:0=0W0T0n0W0q1D0W0P0`050%0h0q0E1y0/0;011C1E1G1E0P1M1O1K0P0h0e0j141L0B1l0P0W0,170c0y0x0t0=0I011Q1A010l0)0E0t0x0D0E1K1=1@1|1S1 1O22240`0a0s0H0B0e0y0e0c0T1a0t0s0#1:0B0B0E0i2p1d270t1l0o1.2C0P1,1+1-0j290=1G0t212m1K1v1x0-1R2M0T2O0t1(1w1K0y2v1l2A2C2*0}1?2q2U1}2Z0B110q0`0s0C2z2.0{2-282:1S2=2@2_0I2|1@2~2A2L01330x2^040s0d372B0|3a310=3d3f0s0K3j392.3b3p2_0V3t3l3v3n3c0e2?3e2_0Z3A2 2/1z323F343g0u3K3m3N3o3P3H3g0g3T3C3V3E3G3q0U3#303%3x040C0p3,3M2V3(3Q0C2{1e2}3B3-3^3/0C363}383 3@2;3X3f0C3i453k3L3w4a0`0C3s4e3u40493)4j3z4m474h4q3:3J4t4g3D423S4z3U414i3:3!4E3$4G4w0C3+4K4o3O4w0I3=4Q484S3Q0I3|2*4u4B4H0I444$4A3.4)4d4,4F4p4Z4l4;4L4?3Y0I4s4_4R3W4T4y4 4X514Z4D544v4Z4J594(4T4P5d4.4w0d4V2,1q2(1d2S2F0j2J3b0i1(251l5q1o5o5m2,5v0#2)4`1S0R0`313t4-3^0Q2_5M4=320i0`0O0e0E0k0j5R5H0=0_040L3A0s5,0s5N1}5J040#0l5#50015P3g5^551~0D0`0f0f2X2o625}3b5(0G673D0h5(0c0E0q5@4m5/1S5(0F3t5.5S3o0`0n0x0k0i0W0E6b3%6m6o6k6r040m3e5Y0B6z3^6B4m6p5$3c0`0j2j2o6K1}5(0Y5*4t5-6#6O5_6d0`6f6h6V1S0e0`0A6-6E6t6v6x6C6q016/040J6`6P0t6s6u6w6y6!6$5,6D016)046+6i2,6{6}6;6j6{726F6H0k6J6N7a6}6 7r7l0`6G1O7p5+786%5~7c7e6=6|6:7H7m6S0e6U7v6P7t705_7L6T0P3A064%3%5;5L7k6P5{5.7%7T5U040v0w7H5(6Z4$6#7a5;5?7H7)7H0l600462640P667+5~697H7F6g7f2}7a6M2*7D3w736^767g6P8f2}8h4B0`0B0x0i2X8l8d6{8o388q3.6R7V7;0`6Y7B787_0`0T8c8B7a7m8t8v2O7S5~0e5{0T0c8V3b8X0`2Z7W7P5_0R7-5W8U86680`7?3~7C6$8L048N8#8r046@758~3%8%8|8!8+5~8-5V1b8x388e8?8J8_8`7w90746_988$0`7u8g8Q0`7/8G046a8;3D9a048/9d2B9f046n9o9A8.9c9w9I9s6{9B9D9w0Y9h8_8{8}9J8D5=8F9Z3^958Z933^9R9M9z6A9g779i9j718E7N8*9P7Q9q9+2;9u7:9/6L0`9y8m8,9L8:a7870`9O8p7_a99E5G5_8A2B8C9,ah9T9V7C9t048S8w9 6.9~9%a09C5X5Z9wa68y9^9l8k9Nax6EavaaaHakadaM6Q9#9`aq9=9@6(6e8b7H7i7K8s8uawaAay6~aT8Ra+aP46067^9Q6R0E8O9F6{7}a32;0l0`0E0c840m0T0#aF89a#6,b16l8H8@469Wa`au0$7p1ca-0=8abeab9p047jbu8 aOaian1}9)979|a89ba?3ka^5-8{7{bf0=b0by3.b3040W6u0P6IbbbP7bbda}ajac048IaYa_6P5;9YbG7Eb%a%7Jb#7mb5b7b9ai9G0Gb,7@9?bC5I8sbn0Bbpb=3b0D0T0`5l8^asbl2v0PboaTcd4jaT6}0Ma:0h0`110Xb!bS3^bsb(7sb_czaBbAb^bwa)aJ92b#a(b`0`bW19bZb#690Yae8P6{cBcIbxaQ5~a;8Tb 7hcEc%8iaV7OcFa.c$9e9kcRbY7AcUa50Y9U4tbL79blbOc=bQ5Qb#7 610fb60B85d60188b#c!c}b+bi3kbkb/8Mb(c5brb@cNc-c^aIb|0fb8badlc1dn0{c4dt015;ckcmbq010c1`04010b01ard3dq046g6f9wdGd29i8{dMc9aT0c0x0`cC6{dQ0`01aGdy5_2n0`0Sbc6*a$dwcJcPaua=c+9}e3dg7m919ndgd|040N7Hd?9H7*eece04d~djdvdgcOeaa*c*c#cK7ycTem0`ehb#ej0Felc.3Defepdgdkesdxa~aIcHe2c@eQ7T9_c;eI3%efeDeedR0YdV4z0o5E0E2C2%e.5p1w5r2F2H2D1%1)2F0x1Ne;0o5q0|f10$0(0*04.
Parcours en largeur
Compléter la méthode largeur de la classe AB . Cette méthode 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
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
>>> vide = AB ( None , None , None )
>>> ab_1 = AB ( None , 1 , None )
>>> ab = AB ( None , 0 , AB ( ab_1 , 2 , None ))
>>> vide . largeur ()
[]
>>> ab . largeur ()
[0, 2, 1]
.128013.8709s3_8èufvIy n7aS1me(P24:jtwi][h)6Oo;bcdg/0làqABp.rF,}=Nk95R{é050N0t0A0p0C0R0c0m0M0R0p0c0c0$010A0C0W010406050c0h0s0s0p0Y0l040q0J0R0h110J0n0m020p0s0W0K0m0+0t1b0Y0T0h0t0c050P181a1c1e160W041C1J051M0P1M1O1J160N0C0j0_0{0}0 0F0C0O0F0R1$0F0A14050;0L0R0t1X0|0~011#1%1)1%0A1/1;1-0A0L0J0N1e1.0Y1K0A0F0_1h0c0W0p0n0 0w011?1Z010i0?0t0n1p0t1-2e2g2l1^2o1;2r0s2t040a0m0v0Y0J0W0J0c0C1k1m0/2c0Y0Y0t0M2O1C2v0n1K0P2a2!0A2827290N2x0 1)0n2q2L1-1U1W0`1@2.0C2:0n241V1-0W2T1K2Y2!35172f1m2_2m2~0Y1b0R140m0r2X3915382w3b1^3d3f3h0w3k2g3m2Y2-013r0p3g040m0d3v2Z163y3p0 3B3D0m0x3H3x393z3N3h0*3R3J3T3L3A0J3e3C3h0H3Y3n3a1Y3q3%3s3E0o3,3K3/3M3;3)3E0f3^3!3`3$3(3O0)403o423V040r0Q473.2`433=0r3j1D3l3Z484g4a0r3u4l3w4n4f3c3|3D0r3G4t3I3-3U4y140r3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4X3_4p4G4b3 4$414(4U0r464,4M3:4U0w4d4=4w4@3=0w4k354S4Z4)0w4s514Y49544B574%4N4~4J5c4-5e3}0w4Q5h4?3{4^4W5n4|5p4~4#5s4T4~4+5x534^4;5B594U0d4`5F4.3=0d504m585L3}0d565P5d4}5S5b5V5i5X3D0d5g5!5o4h5S5m5*5t5,5%5r5/5y5S5w5@5C5M5A5{5G5M5E5 5R3D0x5J3l1L331C2@2%0N2+3z0M242D0.1V1K320t34684K056h0/6p5+0(143p3R5Q2m0B3h6A5W3M0M140%0J0t0h0N6F5#0 13040y3Y0m6W0m6B1^6x040/0i6P5+6D3E6)5:0i0s140e0e2|2N6=6-3z6S0u6`3#0L6S0c0t0R6(6r6G016S0!3R6Y770n140O0p0h0M0F0t6~42797b6Z3M140j3C6M0Y7m4g7o4K7c6Q3A140N2I2N7x2m6S0G6U4R6X7O7B5+701472747I1^0J140X7W7r047g7i7k7p777Y040$7+7C7e7%7h7j7l7N7P6W7q017S047U75377,7Z7#7D047t1;0h7w7A7}7-7/8d7d7s7u8b6V7{7Q5:7 81867-7!767;7E7G0A7:5+8f8A5:7=7F0J7H4R0652426#6z8v6*6E8P8E6I040U0V866S7M517O7}6#6%866+6Y8S3z6/6;6?0n6^0e8Y146}8-6 71738268777z358o3U7f7@7*8{7n147a8h8w040Y0p0M2|7_837C923l944Z8x8H8z997y147L8m7{8%140C8 3w9p49149g9i2:8D3z0J6+0C1B9d8B6+2~9t938%8U6K9K9u7J148!4m8n7P9A049C9L9q7?7)9k9o8e9O9Q9W770(9Y1l9?3w7}8Z9y9*9+8i9;7^9/428C9R8E148W8^048`9l6w9~9!ak5:9n9E9X6J9 ah9c9{7C9}atan909m9wa49*9,9.ad956$8yaa4g9N9B9`9@9|ama02Za29%aFa57|a78G8Iax8B148ga)ae8V8X9#1^6|86az049ZaV6vap9baN2ma^a`ava 6!aUah0GaZ9za79I9jb40 aca-aK6K6M6Oa;6R8_867=7(a9bm78a~aJ9:bcaBa191bvbh9:a%9VaC5+7Kb99F4g8q8~8s85bt7=bya{bL2mbgaS9ebT3Y068$9|7E0t9DaW778+bp0i141A0A0e0j0C0/ahajbH8p8}7Vbt7K9(4uaGb(9f0:8b0nbe7~b b+a|9MbQaoaKb!bwab9_cbb1au8Jb%ayb)ce7}b.bRb:040{0Y0O7vb{86bNc0ci3#c2bKaHcebV1^cHcv84048ucJ9G04b=b@b_a{aXai9x7`a!9,2T0Ac9cb6S0E0DcMbb1A0h0R0;bGarcTa,bYbI140EcGcdbPcUbp9H9hbdbt8td9888k8ccW9v04c?c*a69e2zbU8ea+cb7=0Z2pb{b8dncs5+7=dqd7cVb}aK2qdEc1bobtcRdFdfckdjbWchdH9:br98dSa=aEdA6X7}dDdxdddUbA9edJd*dZbnaid57TbOd+d8bRda9Jc$cTdGd-dC9ra(dV9a04dz8#8n9,0B1#1;cbaP049Udu14dKd;01ded|cY0cb?b^b`dLc(c33Ia!a#9e0pegdtcl4peld:e6aOd,b,9e6%eJe2a}c(bKdB5:6#aIbDcm14ejeG3c14eDd`e1eNe3eretc#dyey15eAdoe.2T18c{0pc}e-5:epen7=0p0W0W2qblena?eqe*enf2eKe(9fdbbzf0cgd{f38j8adifgd!e8eUeba7emfsbfeMcf9:d/efewb|eRaKfdfzeofBd(d}dcfefNa7dXd aDfud$c+fxeQfl3#fffIfD0nfyf)e7fHf$cXfKf-eLfnfLbSfjfVa*f^f?fhbFb7c@ctc7c.0Ycae%3q9Hc_e}e 15b$d%c68)btcxen8/046=es0Y6_fGd@80d_fa9we?ggbag4eYd1b~d^cIfLf(f:eHe/c!evgxexfveB6wgbg6g8eZ4g0c2j04010b01g3gTcY0@f|eSgze^c,c8g7cb0c0pel86gZ1401f/fC422M140,gu8re+dQf{dPeqfUg{0C140#g{g!0!8,enh204h4dNd6h7eqdRgIfS9e89cEbthmhghzhihkfLhmhoendOhrfofid~hahLg1hzhe04hBhlg!0Gg(4X0P6t6o69h$0P6c1C0A6eh+2)2#23252%0p1:h(6c1Ih04g2T0s0e0i0p0(0t0e0F0d141u1w1y1A0me?1L3m1J0k0R0mb=0m0-7g1;2C0n0A0m2K0}0Ch^0m2Q109g2N0t0Y2k7j0pib0mhx8b0m0z0hes1=f50Y0g0^1;iy0-dqiq0Ahjh@0J1j9Pg^ir0m0S0_0:0A1=0c1hi(1liti%0Y0m0{0m0s0-2a6i6Yh#cA1ccD8lh!6i3E2Qi}3p1=6sjaagj96uidif1T1V3z1`1(1*1,6m6a376rj4eV3z8(b*8*8Rf3czcBj7frf ftg 7}hJgPc)eagBe`gcc|eE7.c:d3dmjRe_a.f,2ZcPfAjXg97$dwfFgP0ue99)fwdpf#h|dTf~gKfhfEg-6{dMhIhqjPg)eW14edj`j*eo9T0Jgekcd)j:huj}j{gagMeuk1cK8_jQj@fZeCjWd0c~j_kjjKj+e,km7$ePkBj~jLj?c4eAfOc7e|jVhKf_e)f6f8cFfchOkThMfQkkkEkOiKjJkJd=kLezkNc60i3%ekcYf+2gkg9^9BgWgEk2d?kYkSkC87htl4gJkF87hcewawk 9:f=k,fMklkOl6lhl8kOhQjPg/e^ghgCcOk|eikfk@dJk`kZl47=cZkpe=gRa5kOj(l9lna7k0kXhLlAirg2fYkc6#c-c/j-l5jUe~3,jjh(6n2!h`1N040I0hik0n6h2Thji*iU0p0m237iiVjg2Q3#jq1|1+2ug4k=k+2!jy7M1S6k2^42m4js31jv6q37jyltg*gjenglf_jGj6hyj;h5gwfLcLlVlkl$k{c jY04c=k7aKlLkcbXkze.j/kqf.k.e@j^e.lLdsljlOf+j`c%jM77jOmBd#j#jz3#6#kakI6,7,kemGkAmTf@k(lOesgNm}9$gQlVm:f;kxk@mZe0dfkHn3kKlImEkQl%l3lhf4kV0nf9m-l1hLlglMhve`h9nll97=k*lUm/mXa.0On9l!f4lCnmfPfknvm#9elbnEjSk89-lvm_e#lynJ7fnLnAb;n1lGfGktkMlskheIm@m!m d.m%n=bBnsk!nHewmVgAlJa$nIgXfhnun?h8hNnzloaMn6mpnVgDmQf1m`k@nql7nwa.lFe;n,lrn/lKm(nceqlPgteqomlhbJmDc6lYg?n#kPc`kR57l)2!l+6b6l16h)0:0=0@04.
Parcours en profondeur préfixe
Compléter la méthode prefixe de la classe AB . Cette méthode 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
>>> vide = AB ( None , None , None )
>>> ab_1 = AB ( None , 1 , None )
>>> ab = AB ( None , 0 , AB ( ab_1 , 2 , None ))
>>> vide . prefixe ()
[]
>>> ab . prefixe ()
[0, 2, 1]
.128013.8709s3_8ufvIy n7aêS1me(PV24:jtwi]D[h)6Oo;bcdUgx/0làqABp.rL,}=+Nk95R{é050P0t0B0o0D0V0c0l0O0V0o0c0c0*010B0D0!010406050c0g0s0s0o0$0k040q0L0V0g160L0m0l020o0s0!0M0l0:0t1g0$0X0g0t0c050T1d1f1h1j1b0!041H1O051R0T1R1T1O1b0P0D0i0~1012140H0D0R0H0V1+0H0B19050_0N0V0t1$1113011*1,1.1,0B1@1_1=0B0N0L0P1j1?0$1P0B0H0~1m0c0!0o0m140x011{1(010h0{0t0m1u0t1=2j2l2q1}2t1_2w0s2y040a0l0v0$0L0!0L0c0D1p1r0@2h0$0$0t0O2T1H2A0m1P0T2f2)0B2d2c2e0P2C141.0m2v2Q1=1Z1#0 1|2?0D2^0m291!1=0!2Y1P2%2)3a1c2k1r2~2r330$1g0V190l0r2$3e1a3d2B3g1}3i3k3m0x3p2l3r2%2=013w0o3l040l0d3A2(1b3D3u143G3I0l0y3M3C3e3E3S3m0/3W3O3Y3Q3F0L3j3H3m0J3%3s3f1%3v3,3x3J0n3;3P3@3R3_3.3J0f3}3)3 3+3-3T0.453t473!040r0U4c3?2 483`0r3o1I3q3(4d4l4f0r3z4q3B4s4k3h413I0r3L4y3N3=3Z4D190r3V4H3X4t4C494M3$4P4A4K4T4g3:4W4J3*4v3|4$3~4u4L4g444+464-4Z0r4b4;4R3^4Z0x4i4`4B4|3`0x4p3a4X4(4.0x4x564%4e594G5c4,4S534O5h4=5j420x4V5m4{404}4#5s515u534*5x4Y534:5C584}4_5G5e4Z0d4 3c1U381H2|2,0P2:3E0O292I0?1!1P370t393q3W055Y0@5*5t010-193u5,5i1}0C3m5_5n3v0O190,0L0t0g0P5~5;18040z3%0l6e0l5d4l5?040@0h685y015|3J6n3E0h0s190e0e312S6x6s3*6a0u6C470N6a0c0t0V6m4P6h2r6a0(3W6g5`3R190R0o0g0O0H0t6G4l6R6T6P3v190i3H650$6(6Q196S4P6U5 6W6k2N2S6?1}6a0I6c4W6f776{5;6I196K6M71140L190#7f3F6X6Z6#6%6`6,7g190*6+6V7l046Y6!6$6d786e7r017b047d6N3c7w7h047j6O7w0m6.6:0g6=7q7M7t7v6|7x6/1_7V7C7D7F7H7J7k7N7P7L7#7S6~0L707X7#7N7u7{5;7@0P6 0B3%0657476j5^7Q7#6q6g8b8061040Y0Z7k6a7556777F6j6l7k8d7k6u6w6y0m6A0e8l196F8f6o7-6L7K5+7w6*7 6o7@7z7o8C046_3a798O190$0o0O317p7=696^7!8019827_848F3E738n4r7D7E7w6j0D8J3B8W3Z8Y8!8$8+6o0L6q0D1G8N3E9719338:8V8q8h632^8S8@4z8_788q198}95917y7n7B9b3*9d04999u3*0-9j1q8%8K7#8m7*9p9q7R7m7A9J8 7F7}9E4e198j8S8E8(6o9G629I8S8U3q909F9H9l8;6D8*9z889;9T2(7F739N9p9r9C8~2(9/9Y7^7`9h7M989aaa7#9)049k9|5:6o9M769O7+9Qa89g9.9V7Z9_4u9Z8k9?476E7kagai9,9X6i9{aGaw2raE9+aA6)190Ia08_7F7@8Z8#9=ae5;9WaL6-ah64669#7k8P9xaj9~9^a!8X04aX94aP6@8TaH3h8-838SaSanap7#8H7ea{1}7:a-92aYaja64la$a?9va_aZ4r068p8{8-0ta4ak3E8ub93R0h191F0B0e0i0D0@a,bx7G6J8Ib29n3Na1bqa^0^7V0ma~1}b7btau7Obca^93bm9Uab9sadat8{aJ4Wbo6fa28sbIbw9%3Zbz045(2t0Sa:8L8D7kbXbMaT8`af9sbtbg2rc5bIbbbI7@bBbDbFc19L8D74c79Pc9bR0BbTbV146a0G0Ecqa22Ycu0$bUa%cx190Gc4bKb8b`9A7ib#blcma#cQch7T7(7WcOaB19cAcH017N0+cwbJ7cbLcfcVc!axb$be7/c;9K8,9w9Sc_b!cWb}2Yb cTalcoc,c*c,cec=2rcgdca(cSc 7;c{a@8.a9dk9cc`3BaV19b~0Dc09#b356b;c85;8rbs8t5}bI8w046x0c2-6BbIaCbIdbdo9@04cpb4crdCcadacMbY7Yd0df6}cjbEbGdOcobN1aaodB9(8YbScFc,0c2o04010b01cBbQ6L6K9mcqbpcscDcvc(0c0o19d$7#d|19019$dS472R190;cLc.cNembhdq9}aqdhc:d(eua c}8RbIeo040)7kei8T8ed)01eHeqdQd#dicRb%d5dpeBdraq7%6;eK0D19eJeGd}0(eNeC1}eQer7Ic/eOdee:6}eze_ewbu4(b08/e(e*eKd}0Ie14$0T5.5)1Q5R0T5T1H0B5Vfi2.2*282a2,0o1^fdfg5$1Nf0472Y0s0e0h0o0-0t0e0H0d191z1B1D1F0ld:1Q3r1O0j0V0lbB0l0W0l9f0t0$0lfM0l102h1v1_0S2S0=fV1r0B1A0!0}2V0O0^f?0l0o0!370L7ofZ00fW2k0}2O163k0te.0!0g991D001q0l1o0{991`0@0}5Y0m0O0o0B0=2w2Tf_1`1.dL1F7P1X1S040Q2^0l2P120D0NgmgvgK0L7V0l0=bEf?f$f{f*fW0P00glgBf#gkgJ0h1q2!0Dgj2l2^c00l0@ge99f)0ofM0V1_0lgj0s1of#0`0B0l0BgS0AgS0$0}f*0s0p2Hf)99f?0#0l0F2lgq1`gt0ce.f*5Yf,0tf.gQ2vh8f@0}2t2wh0fW7F1h2S0H1gf?0S19090u0K0u0,0I09dy9.0u2PgT0,0le$7Vf_hpf)001h0N2Y0IgE3r2|3E1 1-1/1;5%5R5P3cfc3Jb=bQb@eOb_e{3Fb|dudwd.04ele!b6eTiedV8oaUbQead`c(dRihcUeZex7?6wicfF6Z0S9#czhY4zdAcc1}dDeg5;i8it8Ob|0eiz0eiBbHeOisiw8)a}c(7@0|asiO8=aRd:iHe85;0O0r19030l0%0o0l0s0=2f5Z0liRd3dviA0g0Sg^8/f~0ggM0l0p2-1`0Df,0=2H0mgvgoh,hv3@1`8j0wcldj9oincs9tc(9B9fd!esiL96e ds04d+cldxi,d=iI6}i%eUd1f 0!2v67ieigiY8Gije~ivfxc?e}i9e`i)f104h)cZi99 dWbPiijCjQeOaWeWj`i9a.c~eAjtjY9vj0bsj2iTj4iVj 19jPike7i4j^e@etj,47j+k4j-j)klevj$jGdmi(kokmjFaqk6d4k9iCjWb#keeOj=imb5dYctebbjj-kH4r1Hi2feft5T1bfg0^0`0|04.
Parcours en profondeur infixe
Compléter la méthode infixe de la classe AB . Cette méthode 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
>>> vide = AB ( None , None , None )
>>> ab_1 = AB ( None , 1 , None )
>>> ab = AB ( None , 0 , AB ( ab_1 , 2 , None ))
>>> vide . infixe ()
[]
>>> ab . infixe ()
[0, 1, 2]
.128013.8709s3_8ufvIy n7aêS1me(P24:jtwi]D[h)6Oo;bcdUgx/0làqABp.r,}=+Nk95R{é050O0t0A0o0C0U0c0l0N0U0o0c0c0(010A0C0Z010406050c0g0s0s0o0#0k040q0K0U0g140K0m0l020o0s0Z0L0l0.0t1e0#0W0g0t0c050S1b1d1f1h190Z041F1M051P0S1P1R1M190O0C0i0|0~10120G0C0Q0G0U1)0G0A17050@0M0U0t1!0 11011(1*1,1*0A1=1@1:0A0M0K0O1h1;0#1N0A0G0|1k0c0Z0o0m120w011_1$010h0_0t0m1s0t1:2h2j2o1{2r1@2u0s2w040a0l0v0#0K0Z0K0c0C1n1p0=2f0#0#0t0N2R1F2y0m1N0S2d2%0A2b2a2c0O2A121,0m2t2O1:1X1Z0}1`2;0C2?0m271Y1:0Z2W1N2#2%381a2i1p2|2p310#1e0U170l0r2!3c183b2z3e1{3g3i3k0w3n2j3p2#2:013u0o3j040l0d3y2$193B3s123E3G0l0x3K3A3c3C3Q3k0-3U3M3W3O3D0K3h3F3k0I3#3q3d1#3t3*3v3H0n3/3N3=3P3@3,3H0f3{3%3}3)3+3R0,433r453Y040r0T4a3;2}463^0r3m1G3o3$4b4j4d0r3x4o3z4q4i3f3 3G0r3J4w3L3:3X4B170r3T4F3V4r4A474K3!4N4y4I4R4e3.4U4H3(4t3`4!3|4s4J4e424)444+4X0r494/4P3?4X0w4g4^4z4`3^0w4n384V4$4,0w4v544#4c574E5a4*4Q514M5f4:5h400w4T5k4_3~4{4Z5q4 5s514(5v4W514.5A564{4@5E5c4X0d4}3a1S361F2`2*0O2.3C0N272G0;1Y1N350t373o3U055W0=5(5r010+173s5*5g1{0B3k5@5l3t0N170*0K0t0g0O5|5/16040y3#0l6c0l5b4j5;040=0h665w015`3H6l3C0h0s170e0e2 2Q6v6q3(680u6A450M680c0t0U6k4N6f2p680$3U6e5^3P170Q0o0g0N0G0t6E4j6P6R6N3t170i3F630#6$6O176Q4N6S5}6U6i2L2Q6;1{680H6a4U6d756_5/6G176I6K6 120K170!7d3D6V6X6Z6#6^6*7e170(6)6T7j046W6Y6!6b766c7p0179047b6L3a7u7f047h6M7u0m6,6.0g6:7o7K7r7t6`7v6-1@7T7A7B7D7F7H7i7L7N7J7Z7Q6|0K6~7V7Z7L7s7_5/7=0O6}0A3#0655456h5?7O7Z6o6e897~5 040X0Y7i687354757D6h6j7i8b7i6s6u6w0m6y0e8j176D8d6m7+6J7I5)7u6(7}6m7=7x7m8A046@38778M170#0o0N2 7n7:676?7Y7~17807@828D3C718l4p7B7C7u6h0C8H3z8U3X8W8Y8!8)6m0K6o0C1E8L3C9517318.8T8o8f612?8Q8=4x8@768o178{938 7w7l7z993(9b04979s3(0+9h1o8#8I7Z8k7(9n9o7P7k7y9H8}7D7{9C4c178h8Q8C8$6m9E609G8Q8S3o8~9D9F9j8/6B8(9x869/9R2$7D719L9n9p9A8|2$9-9W7?7^9f7K9698a87Z9%049i9`5.6m9K749M7)9Oa69e9,9T7X9@4s9X8i9;456C7iaeag9*9V6g9_aEau2paC9)ay6%170H9~8@7D7=8X8Z9:ac5/9UaJ6+af62649Z7i8N9vah9|9?aY8V04aV92aN6=8RaF3f8+818QaQalan7Z8F7ca_1{7.a+90aWaha44ja!a;9ta@aX4p068n8_8+0ta2ai3C8sb73P0h171D0A0e0i0C0=a*bv7E6H8Gb09l3L9 boa?0?7T0ma|1{b5bras7Mbaa?91bk9Sa99qabar8_aH4Ubm6da08qbGbu9#3Xbx9A0m2r0Ra.8J8B7ibVbKaR8^ad9qbrbe2pc3bGb9bG7=bzbBbDb 9J8B72c59Nc7bP0AbRbT12680F0Dcoa02Wcs0#bSa#12ccb^9y7gbZbjckaZcKcf9P8PcdcPcIa52 b}cNajcmcu017L0)c$cwc2bIb6cVbfcU9I8*b!bc7-c;3zaT7R7$7Uc/a`cycFc%17c)d3cHc=94c`9{aocMc_bYcQapdf7/d99tcX0Cb~9Zb154b/c65/8pbq8r5{bG8u046v0c2+6zbGaAbGd8c{c004cnb2cpdvc8c$dKdc7`dbbs4$bydEcibEdHcmbL18amdu9$8WbQcDc$0c2m04010b01czbO6J6I9kcobncqcBctd30c0o17bW7ud?17019!dl3(2P170/c,7abJcTdgd0a$deeodkdL7;cR9weq12ei040%7iec8R8cez01eBekdJc-eadWepega5eseIceeI7=7#6/eE0C17eDbGeF0$eHeR4jeKel7GeneUdXc|c@a^e=eQevc?8,a7e,2peBe%eIeF0Hd{4!0S5,5%1O5P0S5R1F0A5Tfg2,2(26282*0o1?fbfe5!1LdY452W0s0e0h0o0+0t0e0G0d171x1z1B1D0ld*1O3p1M0j0U0lbz0l0V0l9d0t0#0lfK0l0~2f1t1@0R2Q0:fT1p0A1y0Z0{2T0N0?f;0l0o0Z350K7mfX00fU2i0{2M143i0te*0Z0g971B001o0l1m0_971^0=0{5W0m0N0o0A0:2u2Rf@1^1,dE1D7N1V1Q040P2?0l2N100C0MgkgtgI0K7T0l0:bCf;f!f_f(fU0O00gjgzfZgigH0h1o2Y0Cgh2j2?b~0l0=gc97f%0ofK0U1@0lgh0s1mfZ0^0A0l0AgQ0zgQ0#0{f(0s0p2Ff%97f;0!0l0E2jgo1^gr0ce*f(5Wf*0tf,gO2th6f=0{2r2ug~fU7D1f2Q0G1ef;0R17090u0J0u0*0H09dr9,0u2NgR0*0leY7Tf@hnf%001f0M2W0HgC3p2`3C1}1+1-1/5#5P5N3afa3Hb:bOb=eIb@f03tb`dndpd(04efe|8EeNc4dPe2dRcre5bh3(dUfvc:e{dVc?8wcY0e6X0R9ZcxhW4xdtca1{dweO5/i6ifb_6uiafDizbFeIiqa/a{d37=0`aqiM9=dNd*iFikd.a1c$9z9ddTihetbZchbCd%eI6CdO8md,7*i;e`euiua=eTi77qitira}9u9QdjbZiwdoiQ0giAiciej39tiZb0e1i2ew04joi=dhf}0Z2t65jke/7,jveWbbe_j6d4j8e@h%c jI9}ijaS7uiU7WjKddb#cZ9ae?aoe~i!jmcJjVjsjfb~iyjiiSjIiYdEjpjQd-3C6he4d;iX17ju5af95X2%5$2%5Rfu61gVf#0g000_0l1b0h2rh52T0O0:0Z0~f_f!f(1 gH5+k3iZ0!jxjz0ufp0!cM0!jMb1i0gb1f0l8Xf~3*h5fW0Ukdf*0:2F0m0@2Rg?gy0o0l0s0:2d5X6ei05$cY1Fi0h;19fe0?0^0`04.
Parcours en profondeur suffixe
Compléter la méthode suffixe de la classe AB . Cette méthode 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
>>> vide = AB ( None , None , None )
>>> ab_1 = AB ( None , 1 , None )
>>> ab = AB ( None , 0 , AB ( ab_1 , 2 , None ))
>>> vide . suffixe ()
[]
>>> ab . suffixe ()
[1, 2, 0]
.128013.8709s3_8ufvIy n7aêS1me(PV24:jtwi]D[h)6Oo;bcdUgx/0làqABp.rL,}=+Nk95R{é050P0t0B0o0D0V0c0l0O0V0o0c0c0*010B0D0!010406050c0g0s0s0o0$0k040q0L0V0g160L0m0l020o0s0!0M0l0:0t1g0$0X0g0t0c050T1d1f1h1j1b0!041H1O051R0T1R1T1O1b0P0D0i0~1012140H0D0R0H0V1+0H0B19050_0N0V0t1$1113011*1,1.1,0B1@1_1=0B0N0L0P1j1?0$1P0B0H0~1m0c0!0o0m140x011{1(010h0{0t0m1u0t1=2j2l2q1}2t1_2w0s2y040a0l0v0$0L0!0L0c0D1p1r0@2h0$0$0t0O2T1H2A0m1P0T2f2)0B2d2c2e0P2C141.0m2v2Q1=1Z1#0 1|2?0D2^0m291!1=0!2Y1P2%2)3a1c2k1r2~2r330$1g0V190l0r2$3e1a3d2B3g1}3i3k3m0x3p2l3r2%2=013w0o3l040l0d3A2(1b3D3u143G3I0l0y3M3C3e3E3S3m0/3W3O3Y3Q3F0L3j3H3m0J3%3s3f1%3v3,3x3J0n3;3P3@3R3_3.3J0f3}3)3 3+3-3T0.453t473!040r0U4c3?2 483`0r3o1I3q3(4d4l4f0r3z4q3B4s4k3h413I0r3L4y3N3=3Z4D190r3V4H3X4t4C494M3$4P4A4K4T4g3:4W4J3*4v3|4$3~4u4L4g444+464-4Z0r4b4;4R3^4Z0x4i4`4B4|3`0x4p3a4X4(4.0x4x564%4e594G5c4,4S534O5h4=5j420x4V5m4{404}4#5s515u534*5x4Y534:5C584}4_5G5e4Z0d4 3c1U381H2|2,0P2:3E0O292I0?1!1P370t393q3W055Y0@5*5t010-193u5,5i1}0C3m5_5n3v0O190,0L0t0g0P5~5;18040z3%0l6e0l5d4l5?040@0h685y015|3J6n3E0h0s190e0e312S6x6s3*6a0u6C470N6a0c0t0V6m4P6h2r6a0(3W6g5`3R190R0o0g0O0H0t6G4l6R6T6P3v190i3H650$6(6Q196S4P6U5 6W6k2N2S6?1}6a0I6c4W6f776{5;6I196K6M71140L190#7f3F6X6Z6#6%6`6,7g190*6+6V7l046Y6!6$6d786e7r017b047d6N3c7w7h047j6O7w0m6.6:0g6=7q7M7t7v6|7x6/1_7V7C7D7F7H7J7k7N7P7L7#7S6~0L707X7#7N7u7{5;7@0P6 0B3%0657476j5^7Q7#6q6g8b8061040Y0Z7k6a7556777F6j6l7k8d7k6u6w6y0m6A0e8l196F8f6o7-6L7K5+7w6*7 6o7@7z7o8C046_3a798O190$0o0O317p7=696^7!8019827_848F3E738n4r7D7E7w6j0D8J3B8W3Z8Y8!8$8+6o0L6q0D1G8N3E9719338:8V8q8h632^8S8@4z8_788q198}95917y7n7B9b3*9d04999u3*0-9j1q8%8K7#8m7*9p9q7R7m7A9J8 7F7}9E4e198j8S8E8(6o9G629I8S8U3q909F9H9l8;6D8*9z889;9T2(7F739N9p9r9C8~2(9/9Y7^7`9h7M989aaa7#9)049k9|5:6o9M769O7+9Qa89g9.9V7Z9_4u9Z8k9?476E7kagai9,9X6i9{aGaw2raE9+aA6)190Ia08_7F7@8Z8#9=ae5;9WaL6-ah64669#7k8P9xaj9~9^a!8X04aX94aP6@8TaH3h8-838SaSanap7#8H7ea{1}7:a-92aYaja64la$a?9va_aZ4r068p8{8-0ta4ak3E8ub93R0h191F0B0e0i0D0@a,bx7G6J8Ib29n3Na1bqa^0^7V0ma~1}b7btau7Obca^93bm9Uab9sadat8{aJ4Wbo6fa28sbIbw9%3Zbz7I0g0h2t0Sa:8L8D7kbXbMaT8`af9sbtbg2rc6bIbbbI7@bBbDbFc29L8D74c89PcabR0BbTbV146a0G0Ecra22Ycv0$bUa%14cfb`9A7ib#blcna#cNci9R8RcgcScLa71db 0Dc19#b3bjcM040+cxbJ7cbLcWb!cTb$be7/cX9K8,arc`c?cYaxb}c#c%bI6Ec)b-7|19c-cI01czc5bKb8d12rchdja(cPc 7;c|a@7%6;8ScBb:bpctb@dm14b_dr6t6v046x0c2-6Bd6c4bIcKdE9@04cqb4cs5;8|cc7,dhbY7Yd0dQa7ckbEbGdM040udT8oaocd1}6jcEcwdd0c2o04010b01cCbQ6L6K9mcrdydW8YbScGc.0c0o19d#7#d|19019$d(4l2R190;dgc:diendkc{3BaVbda`dB01dleva(8Q9yeCep040)7kej8T8eeJ0Deqes7Ic;eCeEeyaqdoc=dqeZ7?7T7(7WeR19eMbIeO0(eQeF14eKerdOd!dpcOb%cQ96ex9}aq8.a9e@01eKe/eJd}0Ie14$0T5.5)1Q5R0T5T1H0B5Vfn2.2*282a2,0o1^fifl5$1Nbu3*2Y0s0e0h0o0-0t0e0H0d191z1B1D1F0lbN2)1X1S040j0V0lbB0l0W0l9f0t0$0lfR0l102h1v1_0S2S0=f#1r0B1A0!0}2V0O0^f|0l0o0!370L7of)00f$2k0}2O163k0te=0!0g991D001q0l1o0{991`0@0}5Y0m0O0o0B0=2w2Tf 1`1.dJ1F7PfW1O0Q2^0l2P120D0NgsgBgP0L7V0l0=bEf|f,g1f:f$0P00grgHf+gqgO0h1q2!0Dgp2l2^c10l0@gk99f/0ofR0V1_0lgp0s1of+0`0B0l0BgX0AgX0$0}f:0s0p2Hf/99f|0#0l0F2lgw1`gz0ce=f:5Yf=0tf@gV2vhdf}0}2t2wh5f$7F1h2S0H1gf|0S19090u0K0u0,0I09d88 0u2PgY0,0ldt7Vf huf/001h0N2Y0IgK3r2|3E1 1-1/1;5%5R5P3cfh3Jb=bQdAf7dDe(80b|c!c0f08=dNeCdPiealaRfUb;b5e9cud`c*6He|e$b#0eihc$fK6Z0S9#cAh%3Nisd?148rbs8t5}cib|iCb~ii0eiGbHimizeC8Mixd20|asioikdSirbP7#0O0r19030l0%0o0l0s0=2f5Z0liVd4iF0g0Sg}8/g40ggR0l0p2-1`0Df=0=2H0mgBguh;hA3@1`8j0wcme%bOaUbQ9tdd9B9fc.inf3dad%i-4(bAdJcld,i%cpi:d=dZetehcRjHjFc}e#eXf2fCa7eHijc+jvj$d2j3iXiZd-emjIa7i+b2e7i9b6i$f7eYjXa@jZj~j#ezc~iAc@j.iEiYj6i!f77@j^d-iK1ad=iN7xkgj!jWj,a 04g50!2v67j;eU7.k7eCaWe e}c@h.e,f79 dUe89(eacFcHi)krkn4r1Hi7fjfy5TfB63g$f-0g000{0liDhc2V0P0=0!10g1f,f:21gO5-5Z04i+0#ktkv0ufw0#cP0#kGb3i7gj1h0l8Zg63,hcf(0Vk(jijk0_2Tg}fSi~j0gv6gi75(iikUk{h60glsk{31lvfgk{h{1bfl0^0`0|04.
Compléments
Il est à noter qu'ici, il n'est pas possible de stocker None en tant que valeur dans un arbre binaire implémenté de cette façon. En effet, si l'argument valeur est None , l'instance interne de Noeud n'est jamais créée.
Ce n'est généralement pas gênant, car il rare d'avoir besoin de stocker None en plus d'autres types de données dans le même arbre binaire, mais il peut être intéressant de garder ce détail à l'esprit.
Il est également possible de déclarer la classe Noeud à l'intérieur de la classe AB, de manière à ne pas l'exposer à l'utilisateur. Elle est alors un attribut de classe, qui peut être accédé depuis une instance avec self.Noeud (Nota: le comportement des attributs de classes vs instances a un fonctionnement particulier à python).
Dans ce cas, l'implantation de la méthode __init__ devient :
class AB :
class Noeud :
def __init__ ( self , gauche , valeur , droit ):
self . valeur = valeur
self . gauche = None
self . droit = None
def __init__ ( self , gauche , racine , droit ):
if racine is not None :
if gauche is None :
gauche = AB ( None , None , None )
if droit is None :
droit = AB ( None , None , None )
racine = self . Noeud ( gauche , racine , droit )
self . racine = racine
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)