Insertion dans un ABR (4)
Un arbre binaire est soit vide, représenté en Python par la valeur None
, soit un nœud,
contenant une étiquette et deux sous-arbres gauche et droit et représenté par une instance
de la classe Noeud
donnée ci-dessous.
Python |
---|
| class Noeud:
"""Classe représentant un noeud d'un arbre binaire"""
def __init__(self, etiquette, gauche, droit):
"""Crée un noeud de valeur etiquette avec
gauche et droit comme fils."""
self.etiquette = etiquette
self.gauche = gauche
self.droit = droit
def parcours(arbre, liste):
"""parcours récursivement l'arbre en ajoutant les étiquettes
de ses noeuds à la liste passée en argument en ordre infixe."""
if arbre != None:
parcours(arbre.gauche, liste)
liste.append(arbre.etiquette)
parcours(arbre.droit, liste)
return liste
|
La fonction récursive parcours
renvoie la liste des étiquettes des nœuds de l’arbre implé- menté par l’instance arbre dans l’ordre du parcours en profondeur infixe à partir d’une liste vide passée en argument.
Compléter le code de la fonction insere
, qui prend en argument un arbre binaire de recherche arbre
représenté ainsi et une étiquette cle
, non présente dans l’arbre, et qui :
- renvoie une nouvelle feuille d’étiquette
cle
s’il est vide ;
- renvoie l’arbre après l’avoir modifié en insérant
cle
sinon ;
- garantit que l’arbre ainsi complété soit encore un arbre binaire de recherche.
Tester ensuite ce code en utilisant la fonction parcours et en insérant successivement des nœuds d’étiquette 1, 4, 6 et 8 dans l’arbre binaire de recherche représenté ci- dessous :
flowchart TD
A(5) --- B(2)
A --- C(7)
B --- D( )
B --- E(3)
linkStyle 2 stroke-width:0px;
style D opacity:0;
Compléter le script ci-dessous
.128013fdq6nmi7é4=3y_ 9pu08ts5/v1b(P)l;gow-ahR:rS2cekN,.050c0T0v0L0h0F0w0p0S0F0L0w0w0l010v0h0r010406050w0s0g0g0L0P0n040Q0I0F0s0=0I0f050y0|0~10120`0r04051i1b1l0y1i0`0c0h0z0*0,0.0:0,0f0H0s0L0H0T0K0r0n0v0M190p0M0h0H0M0F1N0M0v0^050#0B0F0T1u0-0/011M1O1Q1O0v1W1Y1U0v0P1j1I0*150w0r0L0f0:0R011!1w010b0%0T0f0L0g0T1U1_1{201$231Y26280^0a0p0D0P0I0r0I0w0h180f0p0Z1@0P0P0T0S2t1b2b0f1j0y1I2G1:1=1;1V0c2d1x0h0f252q1U1r1t0+1#2Q2S0f0I2W1U0r2z1j2E2G2-0{1`2u2Y212$0P0 0F1U0L1L2z0b0:030o0o0S2%0T1Q2#0I0K0A3b0^0p0A1b0L2.2;0_2:2c2?1$2^2`2|2~0T3001323436382T3b0K1~040p0R3h3j1{3l2E2P013q0L2{1j2}0M2 3133350Z3A2$3C0m3e0m3I2D3k0`3M3o0:3P3R053T3V3w3X3z2R3B3c0k3e0k3*1c3,3m2=1v3p0I2_3Q3s3U3u3W3y3Z3|3#3c0x3e0x422-3-2;3N3;4c3^3x3Y374i3a3c0e3e0e4o443.473:493r3S3t3v4w3{393C0i3e0i4F3K4q3n4I3O4K4b4M4d4O3`4h4R3c0u3e0u4W2F4Y462Z4#4a3=3@4e3_4g4y4-0K0q3e0q4=3L4r3/4`4L3?4N4f4x3!4A3b0t0^0A0t574@4s4$4|5e4 5g4z3C0A0A5l3g0y3i3+4X455q4{4u4~4P4,3}3b3E0A3H5C3J4?5G5a4t4(4v4+515N0A3%045%5o5V4!5X5d4)5f4Q5$3 5)415S5E5U4H4_5.4}4*505h5x4l5)4n5`435F5}2@5r5J615v520A4C5)4E684p5,5~6d5Y5K5!633c0A4T5)4V6m4G595-6q5/5Z625w6v4/5)4;6A6a6C6p5I6r6f5=4j3b545)566N5|6P6c6R6F6s6H520R5k046-5+6b486(605;5M6V0R5z6/5B5D692F1m2+1b2W2J0c1=2O5a4x2V1s1j2*0T2,3k5{1j4x7i2c0h0c0:332E5x3s7p7r6+5$1 2h0T7x6g7z2G5D6=0:0U0^0Z0b7k6o210J3e7O7I3O0b0^2R0w0T2z7T6$1$0@040C7$4Z5~0^100B7#717n4^217)0W7k0p7P3p0^0+0T7,7^7(0^0E0O7k0`7?5G7w017s2;3C3E5d8d6t6I3D7A277C8e7y6{1U5`7U7R3F0p8z833N0w0c0^020d0s0I0v0G8G8I8K8M8J0G7Y7!1Z0,1u1Z0c1{0)0F02030m0q0G7:2z0p0B2R0$8,2w2z0S0M7!8@827?8a2/3M8k0o7t3c5(8j7q8r7E6V3%0p7B7D6U5i948v7%0:8D3e8z0p2z2*0j7Z0f0v0j0p1`0P0p8+0T0X898B90920K5@959d6`5i3 9b8p9J5#6V9H9h7-219k8y8z0N0!0I0s0P2S0p8#8%8)9z0p0g2%0h230j0X8P8O8H8Q9^0G9C8b8 968f1{3C659I979ea48o289P6u0Ka55S9m7}7U7K049;7|7~3:7/0P7;8{2-ai9i010I0^0l0lanaj0S0^0V19at7j7U7)888|9Da1918g4B7vaP985i4C9Naba79K3C6j3Iahahao01ak2z0v9$1a7?av9U7 04aG0T0s0c8B5a7)7+9 aw0f801Ya~4!7`aCaw0UaEa_aHb74_b9a=a+bcaFbfb2a@0:7)0Ebabp010S6}030*2z0L2t2v8$8(0G0s9(0ba{0%b6aNbo2u9EaR0K6xa68l524TaY8qbV5NbTag9mbk0^377Zbg7_0^aM6nbO0pbQa34.aTac8m4/bYb{526Ka(a)8Aaj7X7Nbj7Ub40481bt840:ay04020F8Kcd4saqasb-1$cg9Bb=5Wb*0=8H0!0vaI3Ka+aL7|8}aJ4rb@0f3C6XbU8s5i54b~a!9QcO8u3ic3c3a+ca9zcpcf0^cs8~b30^0H0L0s8`cl5acgaBc8c*al0f7Z7=c)bub0c#3Ocnc|cGbucrd0cac,c.8^d0biaucYb5cA72aK869~c}bPaP9F5mb`cRaddqcQb!6Vdq7G9Xa)b)04b+dh7@3NcDbNdmb?dobR5ydrdw5idOdvcN5x6}c2cWb(c9d2dFa+d6ct5-7L2n2sc:4!c=d.7.c_c{d$dj7*d7d#d0d(dKcu040cd,0vdc0^7{c@bucaccd)bhdka=cFcBa07xdp8i2}90aV5x1~dTeo6v8ib%cXc504a.a:d;2@d|dJd4dnejdN94emaUa86v9a9cds8m5%cU3lb=cI5x9HeKb 5?aabZdU6v9S7Hc^0LeBcqaze.apbea{a}ecb.d`e_1$0g0h0^67d b8e6e;a,bdaG2Se504e7deaDbmf9e|bqeeb;dKeW6va5eZeQ6h4lereM3bafe+e97/f5d:e8ced1d?8Tfab1f2d=e-fh01dd3ka?fDe~0^5RfJe`bseEehcHdMb^3ba%fpdQ5xaXePf*6va%9TfDcZfAe:fCcmfFd3fZc~0^fIeFf`fLfV85fbf5fS043)fMbrdlg1fm3bbTf)e(gge$e!dxb$fxf=fzf_c;f^fdc^8Sf|diawc fMf?gbf4gs4!g86zg4fi04fXfkgef#cJ6JdPgj0Ab}f-gUc1f;g2f@04c?gvfyf{d^gAf d{04g3g1a gFg)fRe 5)fagN44eVgQ5xcLgies6Wglfq5$cLg!e0g;3KfQ3NfBg^f`gxg,f~e{gKfEhcgzhlfcfPa+g85_hngcfYhqeG8r9F6-gTh4hEfta#3chEdzdfg:g$g(htd!g+fHg/hpdGg?g6gG4_g86lhxfjg~flh0hKdWh3fu6|h6f.3DdWhad*hOh!21hghRgwc`fGgEhmg=h`hWcCg@h bug86Mh(gMgdcB0y7m737h757e1b0v78io2M2H0L1Xil0y768a0Z0#0%0w04.
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)