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

.128013fdq6nmi74=3y_ 9pu08ts5/v1b(P)lgow-ah:+rxS2cekN,.050c0S0u0J0h0E0v0o0R0E0J0v0v0k010u0h0q010406050v0r0g0g0J0N0m040P0G0E0r0;0G0f050x0{0}0 110_0q04051h1a1k0x1h0_0c0h0y0)0+0-0/0+0f0F0r0J0F0S0I0q0m0u0K180o0K0h0F0K0E1M0K0u0@050!0A0E0S1t0,0.011L1N1P1N0u1V1X1T0u0N1i1H0)140v0q0J0f0/0Q011Z1v010b0$0S0f0J0g0S1T1^1`1 1#221X25270@0a0o0C0N0G0q0G0v0h170f0o0Y1?0N0N0S0R2s1a2a0f1i0x1H2F1/1;1:1U0c2c1w0h0f242p1T1q1s0*1!2P2R0f0G2V1T0q2y1i2D2F2,0`1_2t2X202#0N0~0E1T0J1K2y0b0/030n0n0R2$0S1P2!0G0I0l0I0z0@0o0z1a0J2-2:0^2/2b2=1#2@2_2{2}0S2 01313335372S3a0I1}040o0Q3h3j1`3l2D2O013q0J2`1i2|0K2~3032340Y3A2#3C0l3e0l3I2C3k0_3M3o0/3P3R053T3V3w3X3z2Q3B3b0j3e0j3*1b3,3m2;1u3p0G2^3Q3s3U3u3W3y3Z3|3#3b0w3e0w422,3-2:3N3;4c3^3x3Y364i393b0e3e0e4o443.473:493r3S3t3v4w3{383C0i3e0i4F3K4q3n4I3O4K4b4M4d4O3`4h4R3b0t3e0t4W2E4Y462Y4#4a3=3@4e3_4g4y4-0I0p3e0p4=3L4r3/4`4L3?4N4f4x3!4A3c0s0@0z0s574@4s4$4|5e4 5g4z3C0z3d045y5o455q4{4u4~4P4,3}3c3E0z3H0x3i3+4X5D5a4t4(4v4+515K0z3%5A3)5P3J4?5T4!5V5d4)5f4Q5!3 5A415)5R5+4H4_5.4}4*505h5x4l5A4n5`435S5}2?5r5G615v520z4C5A4E682.1n2*1a2V2I0c1;2N5a4x2U1r1i2)0S2+3k5{1i4x6D2b0h0c0/322D5x3s6K6M625w3b3d0o2g0S6S6g5!1T5`6b1#0T0@3o6F5,4_0H3e6.6)3:0R0@0U0G0S0r0c6?594!0?040L6F0_692E5D6R016N2:3C3E5d7b5Y633b1}6X266Z7c6T527g5)0o7v0o6/206+040Y0b704Z6:6=786I4^200b0g0@322Q2r327E7K1#730B7T3N0A730v367D7I7y7V0@0V6F7x6@3O0@0Z0h0d0r0Z0u0S7Y5a737-7I7/715~0@0F0J0r0R0K7|7)7:7 7.7*3:0@0c2m2r7}720@0D757I772.3M7i0n6O3b5$7h6L7q6#4j3a1~6Y6!5=8E8z7u7w8N8g017!0@7$0E7(8t83200G0@0W8m84040y8f7:8Z040k8*8X3p7=0;7^7`8b4p7Y8v8x0I5@8A8I5J8E3 7n27915Z936%3i8N8O7:8R048T8V6E8+8!8$2?8587898_3k827F8Y0@8.818P0f9o888a768{8B7d1`3C65908C8J5i4l957p7j6U0I9K8M9c9t7U0/9f9h9m1#8,8#8c8:8h7B8k0u8/9u9(9w9;9Z7;9.0G8l8r9F6S8}6j9L9S524C9Q977k0Ia25)8s9j4r8|7e3b4T4M8v8D5i4Ta79M92an9a3l9+6J9G8wah0I4/akaxam3C4/apa45KaB3*7:7A7C9%0/6;3FaP3O0b0@0!0$1XaT7WaT9A040Ja!8o8q8`av2tag9I3b54aCa89T54aH7r5Ka?3I9d9,017A0h9i3K9Y4s0@a)9y8+aR0h0v9^3N0T6_046{2Ra*749Ea.0oa:0f5x5ka@aq985i5m8G7oa^6hbva 9Xb75a7A2y0u0r0N19bbb10g0h0@5n9~bqbs5x5za3a|8E5ybB96bxa9b(2F9b7w8PbK0ZbNbP2,bI4!bS5lbg5a8,0Mb~5-aW0#0EaZbq7~0@7Xc8c3a(aT9)a$9B9qbn0Dc24_c0cm9n04aXc69r3K8Pa#cc8%ba8W9=0/cgcycq8j9|9:cF7+04clbWcBa/ax8}5N6QaD9N5x7m8Hb+9TcTb.aucPbrcRaz5#cUbD5!3%a{aE6V8L5QaM8i3uaTaR7xcK3:aV040K877{bNbncbc)5Ub9cka,44bXc+a;3c8 2|alcW6V94cZaIb%8 9Wb`4_b3b52EdvcqcA9s8P0GbdbfbQcCb2bjblcu798d0@de5Sdga0c,9KdlcVar64b)9Rb$bz9Vb/9Xb;0@bLb@cp9?040IaTb|5Abpc)bY6Va2dXc/b%a6dqd%5xabd*dA6*d-b?bOd:0/d^3gdI9_coeh4s0A0@0~0Od8chd3d56}0Neqd09`dCcv9k049*dacd869CdN7J3N730D80b_9z0@d416eueweEczcf9lexa%cH9}eV20eLcNa-6n6H1l6p0x6r1a0u6te=2L2G0J1W6C6q6z770Ycs0v04.