taille récursive d'un arbre binaire (2)

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

.128013b=wlSdf-:431(gnah.p/+uerovm)q6 x72i,y9c8s_PNtk05050g0x0T0q0J0e0P0F0N0e0q0P0P0c010T0J0t010406050P0w0B0B0q0y0L040f0z0e0w0;0z0p050u0{0}0 110_0t04051h1a1k0u1h0_0g0J0A0)0+0-0/0+0p0o0w0q0o0x0i0t0L0T0r180F0r0J0o0r0e1M0r0T0@050!0b0e0x1t0,0.011L1N1P1N0T1V1X1T0T0y1i1H0)140P0t0q0p0/0I011Z1v010h0$0x0p0q0B0x1T1^1`1 1#221X25270@0a0F0R0y0z0t0z0P0J170p0F0Y1?0y0y0x0N2s1a2a0p1i0u1H2F1/1;1:1U0g2c1w0J0p242p1T1q1s0*1!2P2R0p0z2V1T0t2y1i2D2F2,0`1_2t2X202#0y0~0e1T0q1K2y0h0/030Q0Q0N2$0x1P2!0z0i0l0i0m0@0F0m1a0q2-2:0^2/2b2=1#2@2_2{2}0x2 01313335372S3a0i1}040F0I3h3j1`3l2D2O013q0q2`1i2|0r2~3032340Y3A2#3C0l3e0l3I2C3k0_3M3o0/3P3R053T3V3w3X3z2Q3B3b0k3e0k3*1b3,3m2;1u3p0z2^3Q3s3U3u3W3y3Z3|3#3b0W3e0W422,3-2:3N3;4c3^3x3Y364i393b0E3e0E4o443.473:493r3S3t3v4w3{383C0H3e0H4F3K4q3n4I3O4K4b4M4d4O3`4h4R3b0O3e0O4W2E4Y462Y4#4a3=3@4e3_4g4y4-0i0M3e0M4=3L4r3/4`4L3?4N4f4x3!4A3c0V0@0m0V574@4s4$4|5e4 5g4z3C0m3d045y5o455q4{4u4~4P4,3}3c3E0m3H0u3i3+4X5D5a4t4(4v4+515K0m3%5A3)5P3J4?5T4!5V5d4)5f4Q5!3 5A415)5R5+4H4_5.4}4*505h5x4l5A4n5`435S5}2?5r5G615v520m4C5A4E682.1n2*1a2V2I0g1;2N5a4x2U1r1i2)0x2+3k5{1i4x6D2b0J0g0/322D5x3s6K6M625w3b3d0F2g0x6S6g5!1T5`6b1#0U0@3o6F5,4_0d3e6.6)3:0N0@0S0z0x0w0g6?594!0?040j6F0_692E5D6R016N2:3C3E5d7b5Y633b1}6X266Z7c6T527g5)0F7v0F6/206+040Y0h704Z6:6=786I4^200h0B0@322Q2r327E7K1#730n7T3N0b730P367D7I7y7V0@0K6F7x6@3O0@0Z0J0D0w0Z0T0x7Y5a737-7I7/715~0@0o0q0w0N0r7|7)7:7 7.7*3:0@0g2m2r7}720@0C757I772.3M7i0Q6O3b5$7h6L7q6#4j3a1~6Y6!5=8E8z7u7w8N8g017!0@7$0e7(8t83200z0@0s8m84040A8f7:8Z040c8*8X3p7=0;7^7`8b4p7Y8v8x0i5@8A8I5J8E3 7n27915Z936%3i8N8O7:8R048T8V6E8+8!8$2?8587898_3k827F8Y0@8.818P0p9o888a768{8B7d1`3C65908C8J5i4l957p7j6U0i9K8M9c9t7U0/9f9h9m1#8,8#8c8:8h7B8k0T8/9u9(9w9;9Z7;9.0z8l8r9F6S8}6j9L9S524C9Q977k0ia25)8s9j4r8|7e3b4T4M8v8D5i4Ta79M92an9a3l9+6J9G8wah0i4/akaxam3C4/apa45KaB3*7:7A7C9%0/6;3FaP3O0h0@0!0$1XaT7WaT9A040qa!8o8q8`av2tag9I3b54aCa89T54aH7r5Ka?3I9d9,017A0J9i3K9Y4s0@a)9y8+aR0J0P9^3N0U6_046{2Ra*749Ea.0Fa:0p5x5ka@aq985i5m8G7oa^6hbva 9Xb75a7A2y0T0w0y19bbb10B0J0@5n9~bqbs5x5za3a|8E5ybB96bxa9b(2F9b7w8PbK0ZbNbP2,bI4!bS5lbg5a8,0vb~5-aW0#0eaZbq7~0@7Xc8c3a(aT9)a$9B9qbn0Cc24_c0cm9n04aXc69r3K8Pa#cc8%ba8W9=0/cgcycq8j9|9:cF7+04clbWcBa/ax8}5N6QaD9N5x7m8Hb+9TcTb.aucPbrcRaz5#cUbD5!3%a{aE6V8L5QaM8i3uaTaR7xcK3:aV040r877{bNbncbc)5Ub9cka,44bXc+a;3c8 2|alcW6V94cZaIb%8 9Wb`4_b3b52EdvcqcA9s8P0zbdbfbQcCb2bjblcu798d0@de5Sdga0c,9KdlcVar64b)9Rb$bz9Vb/9Xb;0@bLb@cp9?040iaTb|5Abpc)bY6Va2dXc/b%a6dqd%5xabd*dA6*d-b?bOd:0/d^3gdI9_coeh4s0b0@0~0Gd8chd3d56}0yeqd09`dCcv9k049*dacd869CdN7J3N730C80b_9z0@d416eueweEczcf9lexa%cH9}eV20eLcNa-6n6H1l6p0u6r1a0T6te=2L2G0q1W6C6q6z770Ycs0P04.