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"
(Ctrl+Clic pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
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

.1280130ldy1,4ké/weibmc:35qaPr 7=9of.gt28;6sSRh)(pNunv050d0m0G0v0n0c0L0y0q0c0v0L0L0A010G0n0R010406050L0T0p0p0v0x0e040M0C0c0T0:0C0U050k0`0|0~100^0R04051g191j0k1g0^0d0n0V0(0*0,0.0O0n0F0O0c1x0O0G0?050Z0o0c0m1s0+0-011w1y1A1y0G1G1I1E0G0x1h0G0O0(130L0R0v0U0.0H011K1u010D0#0m0U0v0p0m1E1%1)1.1M1;1I1@1_0?0a0y0w0x0C0R0C0L0n160U0y0X1#0x0x0m0q2e191|0U1h0k1Z2r1W1Y1X1F0d1~0.1A0U1?2b1E1p1r0)1L2B0n2D0U0C2H1E0R2k1h2p2r2V0_1(2f2J1/2O0x0}0c0?0y0f2o2Z0@2Y1}2#1M2%2)2+0H2.1)2:2p2A012^0v2*040y0s2|2q0^2 2?0.32340y0h382~2Z303e2+0t3i3a3k3c310C2(332+0K3p2;2!1t2@3u2_350z3z3b3C3d3E3w350I3I3r3K3t3v3f0B3Q2=3S3m040f0b3X3B2K3T3F0f2-1a2/3q3Y3*3!0f2{3/2}3;3)2$3M340f373`393A3l3 0?0f3h433j3=3~3U483o4b3|464f3#3y4i453s3@3H4o3J3?473#3P4t3R4v4l0f3W4z4d3D4l0H3%4F3}4H3F0H3.2X1m2T192H2u0d1Y2z3s0q2P1`1h4V1i4T4R2X4#0X2U4A1/0i0?0X0D3i0y4p3Z0D0?2M0L0m2k3i4|3*0=040Q544u2$0?0~0o534b551/570g4`5i2@0?0)0m5a4;1M570P0r3(300l2+0y5C5s4G0.0L0d0?020u0T0C0G0J5K5M5O5Q5N0J50521J0*1s1J0d1)0%0c02030s0B0J5e2k0y0o2M0!5:2h2k0q0O525{5r4L305H5B5C2k2S0j510U0G0j0y1(0x0y5/0m0E5y3s62355C0y0N0Y0C0T0x2D0y5)5+5-6g0y0p2P0n1;0j0E5T5S5L5U6H0J3p6n4{5b1M4?046D5m6Q3d5d0x5f5 2V6P5t0.0C0?0A0A6V6(010i0q0?0S176#2/5n0.575x4i6O6O6{6:0?2k0G6s184b6%5F316?0C0m0T0d5E4M6|0?595h6W7c045q7i305k6.7b6;7d2D7s3s7u79727x046@7z7n6/5v7v7j010q0f0?030(2k0v2e2g5*5,0J0T6u0D7f0#1I6N6n7E0?0m0$6_2}726}7+707a7N6S6U7D7o0U5p7*7~6/6*04020c5O7M3l6Y6!7A3S856i7J7b80040Y0n5L0Y0G7;2q7?0?6~6$067_7_728k6g8e3*8g8D5c040F0v0T5~8a3s856-838j4 0U515g2X7o577m8X6/8B6Z8W6`7o8F8i7N8k8J8L5|8G5u0?5l8R8.818r4:7b7L6 8y7-8l7:8?7k048v3:8y708A8c8)7=8+0?8h8#8S040d282d8N8f6+9q3?8T8V8}8t58967p8C8-308,9k8{9m9o0G9A7C6$9d7q829G7t0?0P4`8x927o6S75779t8H9C2V064j4q5d9$1M8P9.6X7G7e7g9L7l9A0p0n0?4h9R7B8^9;6:6=9?7Ia03S9M2/7`307F7H9x8Y9T6j3Z9-8`9E9sam9,6T8U5X9_9z9Daq0vau8_9N7o9|0?3_a856ai60axa39:apakar9wau8!8*8$alaG5ja2aN3*aD0442aW8@049UaJaOayaZ1/aMaBaUaPatawa99`a_9u04a.a(97aAab72a#4sb001909)9Oa b39h048Qa=9l5W9f8sahavb78Baza3a#4QaT8 aIba7 aVbd84aobh9Hbjag7Ka{bobz9gbH04b22}ac3sa#4ab7b93:bbaLbCbAbiasbk8~7N8Z9Abpa|aXbNbr9}044nbUbwbWbya~bYbfa38kbFaRb+bKblbMbO2qbQ3Sa#4yb@a*3z0k4.0m2r2Sch4U1q4W2u2x2s0v1Hck0k4V0^cu0Y0!0$04.