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
.128013b;=wlSdf-:431(gnahR.p/uerovm)q6 72i,y9éc8s_PNtk05050h0y0U0r0J0f0Q0G0O0f0r0Q0Q0d010U0J0v010406050Q0x0C0C0r0z0L040g0A0f0x0=0A0q050w0|0~10120`0v04051i1b1l0w1i0`0h0J0B0*0,0.0:0,0q0p0x0r0p0y0j0v0L0U0s190G0s0J0p0s0f1N0s0U0^050#0b0f0y1u0-0/011M1O1Q1O0U1W1Y1U0U0z1j1I0*150Q0v0r0q0:0I011!1w010i0%0y0q0r0C0y1U1_1{201$231Y26280^0a0G0S0z0A0v0A0Q0J180q0G0Z1@0z0z0y0O2t1b2b0q1j0w1I2G1:1=1;1V0h2d1x0J0q252q1U1r1t0+1#2Q2S0q0A2W1U0v2z1j2E2G2-0{1`2u2Y212$0z0 0f1U0r1L2z0i0:030R0R0O2%0y1Q2#0A0j0n3b0^0G0n1b0r2.2;0_2:2c2?1$2^2`2|2~0y3001323436382T3b0j1~040G0I3h3j1{3l2E2P013q0r2{1j2}0s2 3133350Z3A2$3C0m3e0m3I2D3k0`3M3o0:3P3R053T3V3w3X3z2R3B3c0l3e0l3*1c3,3m2=1v3p0A2_3Q3s3U3u3W3y3Z3|3#3c0X3e0X422-3-2;3N3;4c3^3x3Y374i3a3c0F3e0F4o443.473:493r3S3t3v4w3{393C0H3e0H4F3K4q3n4I3O4K4b4M4d4O3`4h4R3c0P3e0P4W2F4Y462Z4#4a3=3@4e3_4g4y4-0j0M3e0M4=3L4r3/4`4L3?4N4f4x3!4A3b0W0^0n0W574@4s4$4|5e4 5g4z3C0n0n5l3g0w3i3+4X455q4{4u4~4P4,3}3b3E0n3H5C3J4?5G5a4t4(4v4+515N0n3%045%5o5V4!5X5d4)5f4Q5$3 5)415S5E5U4H4_5.4}4*505h5x4l5)4n5`435F5}2@5r5J615v520n4C5)4E684p5,5~6d5Y5K5!633c0n4T5)4V6m4G595-6q5/5Z625w6v4/5)4;6A6a6C6p5I6r6f5=4j3b545)566N5|6P6c6R6F6s6H520I5k046-5+6b486(605;5M6V0I5z6/5B5D692F1m2+1b2W2J0h1=2O5a4x2V1s1j2*0y2,3k5{1j4x7i2c0J0h0:332E5x3s7p7r6+5$1 2h0y7x6g7z2G5D6=0:0V0^0Z0i7k6o210e3e7O7I3O0i0^2R0Q0y2z7T6$1$0@040o7$4Z5~0^100b7#717n4^217)0K7k0G7P3p0^0+0y7,7^7(0^0D0k7k0`7?5G7w017s2;3C3E5d8d6t6I3D7A277C8e7y6{1U5`7U7R3F0G8z833N0Q0h0^020E0x0A0U0c8G8I8K8M8J0c7Y7!1Z0,1u1Z0h1{0)0f02030m0M0c7:2z0G0b2R0$8,2w2z0O0s7!8@827?8a2/3M8k0R7t3c5(8j7q8r7E6V3%0G7B7D6U5i948v7%0:8D3e8z0G2z2*0N7Z0q0U0N0G1`0z0G8+0y0u898B90920j5@959d6`5i3 9b8p9J5#6V9H9h7-219k8y8z0t0!0A0x0z2S0G8#8%8)9z0G0C2%0J230N0u8P8O8H8Q9^0c9C8b8 968f1{3C659I979ea48o289P6u0ja55S9m7}7U7K049;7|7~3:7/0z7;8{2-ai9i010A0^0d0danaj0O0^0T19at7j7U7)888|9Da1918g4B7vaP985i4C9Naba79K3C6j3Iahahao01ak2z0U9$1a7?av9U7 04aG0y0x0h8B5a7)7+9 aw0q801Ya~4!7`aCaw0VaEa_aHb74_b9a=a+bcaFbfb2a@0:7)0Dbabp010O6}030*2z0r2t2v8$8(0c0x9(0ia{0%b6aNbo2u9EaR0j6xa68l524TaY8qbV5NbTag9mbk0^377Zbg7_0^aM6nbO0GbQa34.aTac8m4/bYb{526Ka(a)8Aaj7X7Nbj7Ub40481bt840:ay04020f8Kcd4saqasb-1$cg9Bb=5Wb*0=8H0!0UaI3Ka+aL7|8}aJ4rb@0q3C6XbU8s5i54b~a!9QcO8u3ic3c3a+ca9zcpcf0^cs8~b30^0p0r0x8`cl5acgaBc8c*al0q7Z7=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(dKcu040hd,0Udc0^7{c@bucaccd)bhdka=cFcBa07xdp8i2}90aV5x1~dTeo6v8ib%cXc504a.a:d;2@d|dJd4dnejdN94emaUa86v9a9cds8m5%cU3lb=cI5x9HeKb 5?aabZdU6v9S7Hc^0reBcqaze.apbea{a}ecb.d`e_1$0C0J0^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#cJ6JdPgj0nb}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(gMgdcB0w7m737h757e1b0U78io2M2H0r1Xil0w768a0Z0#0%0Q04.
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)