Arbre binaire (taille et hauteur)

On trouve dans la littérature différentes définitions d'un arbre binaire.

Nous reprenons ici la définition de Donald Knuth1: un arbre binaire est un ensemble fini de nœuds. Cet ensemble est soit vide, soit constitué d'un nœud appelé racine et des éléments de deux arbres binaires disjoints appelés sous-arbres gauche et droit de la racine.

On représente un arbre binaire comme ci-dessous:

arbre binaire 1

Cet arbre binaire a une racine qui a deux sous-arbres non vides.

Le sous-arbre gauche est composé d'une racine et de ses deux sous-arbres qui sont vides.

Le sous-arbre droit est composé d'une racine qui a un sous-arbre gauche vide et un sous-arbre droit composé d'une racine qui a un sous-arbre droit vide et un sous-arbre gauche composé d'une racine et de ses deux sous-arbres vides.

La taille d'un arbre binaire est son nombre de nœuds. On peut la définir récursivement. Pour cela, on note \(t\) la fonction taille et, pour un arbre binaire non vide \(ab\), \(sag\) et \(sad\) son sous-arbre gauche et son sous-arbre droit. Alors :

\[t(ab) = \begin{cases}0 \text{ si } ab \text{ est vide}\\ \\1+t(sag)+t(sad) \text{ sinon }\end{cases}\]

La hauteur d'un arbre binaire est aussi définie récursivement, en notant \(h\) la fonction hauteur, par :

\[h(ab) = \begin{cases}0 \text{ si } ab \text{ est vide}\\ \\1+\max(h(sag)~;~h(sad)) \text{ sinon }\end{cases}\]
Exemple

arbre binaire 2

Cet arbre binaire a pour taille 5 et pour hauteur 4. On a numéroté les nœuds.

Nous utilisons la programmation orientée objet pour implémenter la structure d'arbre binaire. Dans la classe ArbreBinaire, la valeur None indique l'absence de valeur. Par exemple, l'arbre binaire vide n'a pas de racine et donc pas de sous-arbre.

Il est demandé de compléter les deux méthodes tailleet hauteur dans le code de la classe ArbreBinaire.

Taille de l'arbre

Compléter la méthode taille de la classe ArbreBinaire.

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

.128013s3o_8;bcdufvg/T0ly n7ABapS.r1F-me,(P2=4:+Ntwki95hx)6050j0H0R0y0U0r0b0t0i0r0y0b0b0M010R0U0z010406050b0k0G0G0y0C0s040A0d0r0k0^0d0u050o0 1113150}0z041e1l051o0o1o1q1l0}0j0U0m0-0/0;0?0X0U0n0X0r1E0X0R0{050(0h0r0H1z0:0=011D1F1H1F0R1N1P1L0R0h0d0j151M0C1m0R0X0-180b0z0y0u0?0L011R1B010l0*0H0u0y0G0H1L1?1^1}1T201P23250{0a0t0K0C0d0z0d0b0U1b0u0t0$1;0C0C0H0i2q1e280u1m0o1/2D0R1-1,1.0j2a0?1H0u222n1L1w1y0.1S2N0U2P0u1)1x1L0z2w1m2B2D2+0~1@2r2V1~2!0C120r0{0t0D2A2/0|2.292;1T2?2^2`0L2}1^2 2B2M01340y2_040t0c382C0}3b320?3e3g0t0N3k3a2/3c3q2`0W3u3m3w3o3d0d2@3f2`0!3B302:1A333G353h0v3L3n3O3p3Q3I3h0f3U3D3W3F3H3r0V3$313(3y040D0q3-3N2W3)3R0D2|1f2~3C3.3_3:0D373~39403^2=3Y3g0D3j463l3M3x4b0{0D3t4f3v414a3*4k3A4n484i4r3;3K4u4h3E433T4A3V424j3;3#4F3%4H4x0D3,4L4p3P4x0L3?4R494T3R0L3}2+4v4C4I0L454%4B3/4*4e2-1r2)1e2T2G0j2K3c0i1)261m4_1p4@4=2-4~0$2*4M1~0T0{323u4.3_0S2`5f4G2=0i0{0w0C0h2w0x2Y0)2w5k5a1T0`040O3@3c5i3h0t5H5x4S0?0b0j0{015P5p5r0H5t230U2w0J0Z0t0F020n0R0g0t135S0t0h5u5W1Q0m0U0$5D3E5M2`5H5H5R5s5/5X0b0y0n0I0t0C0y0i2Y0H65620j5Z5#5%5)5+2w5-601Q2!2r5=2t0y0m2x0t0/66686a0t0%6v0H0,0$0k0Y0t0b0d0k0b0F6j6D5^3(5`5G5H5P013B5|0t5g5b0{0$0l5J4Y0?5F6Z4n6!2b0G0{0e0e2Y2p6?6)3c5A0J6{3E0h5A0b0H0r6(6.5l5z0{0I3u6Z783p0{620n6 3(0d0{0M7j3_0T5n040Q1c0H7o1~5A7b4n7d5y7f0467692P7w1T7l047n777C017q0{7t7H7N5K017y7c6/7D6d7I0?7K7M2-7e7P7r7S7v7U6*7W0{0Z5C4u6Y6Y7Z01717g74767*7O7K0B7$3d7g637Y7+7(8a7O0u887i7_7`5I7+7~0473758684868f7E6y7T2+7B7V8c7A7|8t7F6a6X8j8y7;8m8o812~7|8r7:3x880j8d8z7m8U7;8t7#4u067{7+5c046%866,8s0l0{6D0R0e6q7/827V6}868K80865A7@6Q5h5{8j866S6V921~6S8H66220m0d0U1Q0p0C0k1Q2o6v006O6l5V6k8;0t8@6A0R0t0E3f736I2Y1c991T9b8H988i958(0{2w0R0k0C1d8B8l728~8Q3E8P8_8Y9O8v8^2~8I3c0d5F0U0b8X3c7Q7s7u3B8$5|7|8)8+9Y3(8-9 428/040(0*1P8 0{6~a21~8}8pac7904914X5E947`965N049K4-7+9I8j2w0u9f9h6v0y0ta60r1P2s1Q0r9p5q6k5.9s9)477|au7`ar3 9c9|0{0U8M399+709Waf9#9,0{85ag7D8;8?5?aO2C7|6}aj4%9c8%7O8)9P9R9T8x7|0G0U0{4Wa`8HaW047473a95B8Ga{a#3(a~0%b09;3Eb44kbn7k0{0Pbr3_aeaZa?8ba+8s8g8qbBa-87a50)aEa=598`aa0Zbv1~7Kbu9U7ObxbE04a,a)4C8SbXbZ8N7+8taDa8bGa^3L0o570H2D2(b?4^1x4`2G2I2E1(1*2G0y1Ob_0o4_0}c60%bJ0b04.
Hauteur de l'arbre

Compléter la méthode hauteur de la classe ArbreBinaire.

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

.128013s3o_8;bcdufvg/T0ly n7ABapS.r1F-me,(P2=4:+Ntwki95hx)6050j0H0R0y0U0r0b0t0i0r0y0b0b0M010R0U0z010406050b0k0G0G0y0C0s040A0d0r0k0^0d0u050o0 1113150}0z041e1l051o0o1o1q1l0}0j0U0m0-0/0;0?0X0U0n0X0r1E0X0R0{050(0h0r0H1z0:0=011D1F1H1F0R1N1P1L0R0h0d0j151M0C1m0R0X0-180b0z0y0u0?0L011R1B010l0*0H0u0y0G0H1L1?1^1}1T201P23250{0a0t0K0C0d0z0d0b0U1b0u0t0$1;0C0C0H0i2q1e280u1m0o1/2D0R1-1,1.0j2a0?1H0u222n1L1w1y0.1S2N0U2P0u1)1x1L0z2w1m2B2D2+0~1@2r2V1~2!0C120r0{0t0D2A2/0|2.292;1T2?2^2`0L2}1^2 2B2M01340y2_040t0c382C0}3b320?3e3g0t0N3k3a2/3c3q2`0W3u3m3w3o3d0d2@3f2`0!3B302:1A333G353h0v3L3n3O3p3Q3I3h0f3U3D3W3F3H3r0V3$313(3y040D0q3-3N2W3)3R0D2|1f2~3C3.3_3:0D373~39403^2=3Y3g0D3j463l3M3x4b0{0D3t4f3v414a3*4k3A4n484i4r3;3K4u4h3E433T4A3V424j3;3#4F3%4H4x0D3,4L4p3P4x0L3?4R494T3R0L3}2+4v4C4I0L454%4B3/4*4e2-1r2)1e2T2G0j2K3c0i1)261m4_1p4@4=2-4~0$2*4M1~0T0{323u4.3_0S2`5f4G2=0i0{0w0C0h2w0x2Y0)2w5k5a1T0`040O3@3c5i3h0t5H5x4S0?0b0j0{015P5p5r0H5t230U2w0J0Z0t0F020n0R0g0t135S0t0h5u5W1Q0m0U0$5D3E5M2`5H5H5R5s5/5X0b0y0n0I0t0C0y0i2Y0H65620j5Z5#5%5)5+2w5-601Q2!2r5=2t0y0m2x0t0/66686a0t0%6v0H0,0$0k0Y0t0b0d0k0b0F6j6D5^3(5`5G5H5P013B5|0t5g5b0{0$0l5J4Y0?5F6Z4n6!2b0G0{0e0e2Y2p6?6)3c5A0J6{3E0h5A0b0H0r6(6.5l5z0{0I3u6Z783p0{620n6 3(0d0{0M7j3_0T5n040Q1c0H7o1~5A7b4n7d5y7f0467692P7w1T7l047n777C017q0{7t7H7N5K017y7c6/7D6d7I0?7K7M2-7e7P7r7S7v7U6*7W0{0Z5C4u6Y6Y7Z01717g74767*7O7K0B7$3d7g637Y7+7(8a7O0u887i7_7`5I7+7~0473758684868f7E6y7T2+7B7V8c7A7|8t7F6a6X8j8y7;8m8o812~7|8r7:3x880j8d8z7m8U7;8t7#4u067{7+5c046%866,8s0l0{6D0R0e6q7/827V6}868K80865A7@6Q5h5{8j866S6V921~6S8H66220m0d0U1Q0p0C0k1Q2o6v006O6l5V6k8;0t8@6A0R0t0E3f736I2Y1c991T9b8H988i958(0{2w0R0k0C1d8B8l728~8Q3E8P8_8Y9O8v8^2~8I3c0d5F0U0b8X3c7Q7s7u3B8$5|7|8)8+9Y3(8-9 428/040X0y1a0H9R8 0{6~a21~8}8pae7904914X5E947`965N049K4-7+9I8j2w0u9f9h6v0y0ta6a89R2s1Q0r9p5q6k5.9s9)477|aw7`at3 9c9|0{0U8M399+709Wah9#9,0{85ai7D8;8?5?aQ2C7|6}al4%9c8%7O8)9P9R9T8x7|0G0U0{4Wa|8HaY047473ab5B8Ga}a%3(b00%b29;3Eb64kbp7k0{0Pbt420h0{120Ybgada+a(7 a*8N8ba-8s8g8qbLa/87a5a70Ra90CbD0Z7zb49VbHa#a^bK04a.bF3/8SbOb*bMbSaGbWbQa`0Z3L0o570H2D2(b~4^1x4`2G2I2E1(1*2G0y1Oc10o4_0}ce0%0)0+04.

  1. Donald Knuth est un informaticien et mathématicien américain qui a reçu, entre autres distinctions, le prix Turing en 1974. Son ouvrage le plus connu est The Art Of Comuter Programming