Taille et hauteur récursive d'un arbre binaire

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:
    def __init__(self, etiquette, gauche, droit):
        self.v = etiquette
        self.gauche = gauche
        self.droit = droit

graphe 2024 41.1

L’arbre ci-dessus sera donc implémenté de la manière suivante :

Python
a = Noeud(1, Noeud(4, None, None), Noeud(0, None, Noeud(7, None, None)))

Écrire une fonction récursive taille prenant en paramètre un arbre a et qui renvoie la taille de l’arbre que cette instance implémente.

Écrire de même une fonction récursive hauteur prenant en paramètre un arbre a et qui renvoie la hauteur de l’arbre que cette instance implémente.

On considère que la hauteur d’un arbre vide est -1 et la taille d’un arbre vide est 0.

Exemples

Python Console Session
>>> hauteur(a)
2
>>> taille(a)
4
>>> hauteur(None)
-1
>>> taille(None)
0
>>> hauteur(Noeud(1, None, None))
0
>>> taille(Noeud(1, None, None))
1
Compléter le code 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

.128013sP+8x.pt5argmn6lw/y_(qeN,=2b30udif)-h1k:v47oc S9050G0x0i0k0H0q0b0U0T0q0k0b0b0A010i0H0h010406050b0F0n0n0k0l0t040V0S0q0F0;0S0o050s0{0}0 110_0h04051h1a1k0s1h0_0G0H0P0)0+0-0/0+0o0m0F0k0m0x0K0h0t0i0L180U0L0H0m0L0q1M0L0i0@050!0C0q0x1t0,0.011L1N1P1N0i1V1X1T0i0l1i1H0)140b0h0k0o0/0B011Z1v010I0$0x0o0k0n0x1T1^1`1 1#221X25270@0a0U0c0l0S0h0S0b0H170o0U0Y1?0l0l0x0T2s1a2a0o1i0s1H2F1/1;1:1U0G2c1w0H0o242p1T1q1s0*1!2P2R0o0S2V1T0h2y1i2D2F2,0`1_2t2X202#0l0~0q1T0k1K2y0I0/030u0u0T2$0x1P2!0S0K0D0K0M0@0U0M1a0k2-2:0^2/2b2=1#2@2_2{2}0x2 01313335372S3a0K1}040U0B3h3j1`3l2D2O013q0k2`1i2|0L2~3032340Y3A2#3C0D3e0D3I2C3k0_3M3o0/3P3R053T3V3w3X3z2Q3B3b0Q3e0Q3*1b3,3m2;1u3p0S2^3Q3s3U3u3W3y3Z3|3#3b0j3e0j422,3-2:3N3;4c3^3x3Y364i393b0p3e0p4o443.473:493r3S3t3v4w3{383C0R3e0R4F3K4q3n4I3O4K4b4M4d4O3`4h4R3b0e3e0e4W2E4Y462Y4#4a3=3@4e3_4g4y4-0K0W3e0W4=3L4r3/4`4L3?4N4f4x3!4A3c0E0@0M0E574@4s4$4|5e4 5g4z3C0M3d045y5o455q4{4u4~4P4,3}3c3E0M3H0s3i3+4X5D5a4t4(4v4+515K0M3%5A3)5P3J4?5T4!5V5d4)5f4Q5!3 5A415)5R5+4H4_5.4}4*505h5x4l5A4n5`435S5}2?5r5G615v520M4C5A4E682.1n2*1a2V2I0G1;2N5a4x2U1r1i2)0x2+3k5{1i4x6D2b0H0G0/322D5x3s6K6M625w3b3d0U2g0x6S6g5!1T5`6b1#0N0@3o6F5,4_0r3e6.6)3:0T0@0y0S0x0F0G6?594!0?040O6F0_692E5D6R016N2:3C3E5d7b5Y633b1}6X266Z7c6T527g5)0U7v0U6/206+040Y0I704Z6:6=786I4^200I0n0@322Q2r327E7K1#730v7T3N0C730b367D7I7y7V0@0z6F7x6@3O0@0Z0H0w0F0Z0i0x7Y5a737-7I7/715~0@0m0k0F0T0L7|7)7:7 7.7*3:0@0G2m2r7}720@0J757I772.3M7i0u6O3b5$7h6L7q6#4j3a1~6Y6!5=8E8z7u7w8N8g017!0@7$0q7(8t83200S0@0g8m84040P8f7:8Z040A8*8X3p7=0;7^7`8b4p7Y8v8x0K5@8A8I5J8E3 7n27915Z936%3i8N8O7:8R048T8V6E8+8!8$2?8587898_3k827F8Y0@8.818P0o9o888a768{8B7d1`3C65908C8J5i4l957p7j6U0K9K8M9c9t7U0/9f9h9m1#8,8#8c8:8h7B8k0i8/9u9(9w9;9Z7;9.0S8l8r9F6S8}6j9L9S524C9Q977k0Ka25)8s9j4r8|7e3b4T4M8v8D5i4Ta79M92an9a3l9+6J9G8wah0K4/akaxam3C4/apa45KaB3*7:7A7C9%0/6;3FaP3O0I0@0!0$1XaT7WaT9A040ka!8o8q8`av2tag9I3b54aCa89T54aH7r5Ka?3I9d9,017A0H9i3K9Y4s0@a)9y8+aR0H0b9^3N0N6_046{2Ra*749Ea.0Ua:0o5x5ka@aq985i5m8G7oa^6hbva 9Xb75a7A2y0i0F0l19bbb10n0H0@5n9~bqbs5x5za3a|8E5ybB96bxa9b(2F9b7w8PbK0ZbNbP2,bI4!bS5lbg5a8,0db~5-aW0#0qaZbq7~0@7Xc8c3a(aT9)a$9B9qbn0Jc24_c0cm9n04aXc69r3K8Pa#cc8%ba8W9=0/cgcycq8j9|9:cF7+04clbWcBa/ax8}5N6QaD9N5x7m8Hb+9TcTb.aucPbrcRaz5#cUbD5!3%a{aE6V8L5QaM8i3uaTaR7xcK3:aV040L877{bNbncbc)5Ub9cka,44bXc+a;3c8 2|alcW6V94cZaIb%8 9Wb`4_b3b52EdvcqcA9s8P0SbdbfbQcCb2bjblcu798d0@de5Sdga0c,9KdlcVar64b)9Rb$bz9Vb/9Xb;0@bLb@cp9?040KaTb|5Abpc)bY6Va2dXc/b%a6dqd%5xabd*dA6*d-b?bOd:0/d^3gdI9_coeh4s0C0@0~0fd8chd3d56}0leqd09`dCcv9k049*dacd869CdN7J3N730J80b_9z0@d416eueweEczcf9lexa%cH9}eV20eLcNa-6n6H1l6p0s6r1a0i6te=2L2G0k1W6C6q6z770Ycs0b04.