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.

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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

###(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 : 5/5

.128013(qd0h75v/;Ă©6kgSw2)8m9N=lt4:eRb,cpa3u1roisn.fyP 050d0C0z0I0O0y0P0V0G0y0I0P0P0x010z0O0H010406050P0K0u0u0I0M0T040p0N0y0K0:0N0Q050j0`0|0~100^0H04051g191j0j1g0^0d0O0i0(0*0,0.0f0O0o0f0y1x0f0z0?050Z0E0y0C1s0+0-011w1y1A1y0z1G1I1E0z0M1h0z0f0(130P0H0I0Q0.0r011K1u010S0#0C0Q0I0u0C1E1%1)1.1M1;1I1@1_0?0a0V0U0M0N0H0N0P0O160Q0V0X1#0M0M0C0G2e191|0Q1h0j1Z2r1W1Y1X1F0d1~0.1A0Q1?2b1E1p1r0)1L2B0O2D0Q0N2H1E0H2k1h2p2r2V0_1(2f2J1/2O0M0}0y0?0V0L2o2Z0@2Y1}2#1M2%2)2+0r2.1)2:2p2A012^0I2*040V0J2|2q0^2 2?0.32340V0A382~2Z303e2+0h3i3a3k3c310N2(332+0m3p2;2!1t2@3u2_350g3z3b3C3d3E3w350t3I3r3K3t3v3f0v3Q2=3S3m040L0e3X3B2K3T3F0L2-1a2/3q3Y3*3!0L2{3/2}3;3)2$3M340L373`393A3l3 0?0L3h433j3=3~3U483o4b3|464f3#3y4i453s3@3H4o3J3?473#3P4t3R4v4l0L3W4z4d3D4l0r3%4F3}4H3F0r3.2X1m2T192H2u0d1Y2z3s0G2P1`1h4V1i4T4R2X4#0X2U4A1/0n0?0X0S3i4p3S0q2+4`4u2$0S0?2M0P0C2k4 4;1M0=040b584G3d0?0~0E574b4{3*5b0F3i0V5m2$0?0)0C5e4M0.5b0s0B3(304}350V5H5x300P0d0?020c0K0N0z0k5O5Q5S5U5R0k54561J0*1s1J0d1)0%0y02030J0v0k5i2k0V0E2M0!5@2h2k0G0f565 5w4L5K5M5G5H2k2S0l550Q0z0l0V1(0M0V5?0C0R5D3s5L2+5H0V0D0Y0N0K0M2D0V5-5/5;6k0V0u2P0O1;0l0R5X5W5P5Y6L0k3p6r5r501M4?046H5q5s2@5h0M5j632V6T590.0N0?0x0x6Z6U0.0n0G0?0w176)2/6!5z0?5C4i6S6S6 016W2k0z6w184b6+5f316`0N0C0K0d5J3s5b5d5l6?7g045v7m3S5o6=6,776_046{2D7v5n0?5p7d766^7h7E7q7z5A7y7f0G0L0?030(2k0I2e2g5.5:0k0K6y0S7j0#1I6R6r7K0?0C0$6}2}765b722V06747:7r6W6Y7J7r0Q5u7.847z6.04020y5S7R5y7s6k7F1/8b6m7O7f86040Y0O5P0Y0z7^2q7`715q7~7 74768q8j8o8h8m8k6#040o0I0K628g308b6;898p530Q555k2X7r7o8L5g048H8$8a0?8n8-8X8N8P8R8I307x8W8h8q7u8_7n0?0s7/7 7;8r7@8)017{948D5I856$6(998K903Z4@282d8S3s8U9p9l6X8Z5#998(9k3?9g8#6~7r9j8;8}9m0N9o9z1/8{6*8F878x4:7f7Q7d8C95810?797b9s9A8+6%9C3{4j4q5h9$8l6/9/8M6{7j7l9L5a0?7p9G300u0O0?4h9~91047I9O817B7D9R8za69=6@aa6|9x926n9t0Iaf019r8|3l8Y8!ac8%9|998Gajaear3sa00?3_a47wak649-8+aoaqa87z8q5!9*8yaw5cay9.9`70aBaP7faE0442aH7G0493aKamaN9;aC9taSav7PaxaZ8iaAa72/7e8ha(4sa+9MaJ7}9PaMa?3*aOb0b9a^aA9}9DaQaYb59{a#be7ra(4Qbj9Tb73:b9anbb9:048Va$9H9uaubhaXbabma!a 2}b19 a1044abK9abv3{bxa;bBaoaR9vaT9S8h9ybTaza|9Nbp7za(4nbT9Ub89fbJb/7fbdbNbfb$a_buaWa|b,b?7Haoa(4yc6a-3z0j4.0C2r2Scg4U1q4W2u2x2s0I1Hcj0j4V0^ct0Y0!0$04.