Taille et hauteur d'un arbre (1)

Différentes représentations

Cet exercice demande d'écrire les fonctions calculant la taille et hauteur d'un arbre. Il fait partie d'une série dans laquelle on utilise différentes représentations :

Dans tout le sujet, on considère des arbres enracinés. On rappelle que les arbres binaires ne sont pas des arbres enracinés.

On rappelle la définition d'un arbre enraciné : il s'agit d'une racine qui possède \(0\), \(1\) ou plusieurs sous-arbres qui sont eux-mêmes des arbres enracinés. Les arbres considérés dans cet exercice ne possèdent pas d'étiquettes.

Un arbre enraciné qui ne possède pas de sous-arbre est appelé feuille.

On représente un arbre enraciné par une liste Python contenant ses sous-arbres. Une feuille est donc représentée par [].

L'arbre représenté par [[], [], [[]]] a quant à lui une racine et possède trois sous-arbres :

  • le premier est une feuille,

  • le deuxième est une feuille,

  • le troisième est un arbre qui a un sous-arbre qui est une feuille.

Cet arbre se dessine ainsi :

graph TD
    R{ } --> N1{ }
    R    --> N2{ }
    R    --> N3{ }
    N3   --> N4{ }

Dans cet exercice, la définition de la hauteur d'un arbre est le nombre maximal de filiations pour rejoindre la racine à une feuille. Un arbre réduit à sa racine a donc une hauteur égale à \(0\).

1. Taille de l'arbre

Écrire la fonction taille qui prend en paramètre une liste représentant un arbre et renvoie sa taille.

Exemples
>>> taille([])
1
>>> taille([[], [], [[]]])
5

###(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

.128013[snaRcPmy)f]4L_wu2ql3 (ev0;éb+okCp/ihSg1t:à5=.dr050V0y0P0e0K0u0c0w0g0u0e0c0c0T010P0K0I010406050c0r0i0i0e0W0j040M0F0u0r0;0F0d0w020e0i0I0B0w0f0y0~0W0t0r0y0c050J0{0}0 110_0I041p1w051z0J1z1B1w0_0V0K0z0)0+0-0/0L0K0N0L0u1P0L0P0@050!0D0u0y1K0,0.011O1Q1S1Q0P1Y1!1W0P0D0F0V111X0W1x0P0L0)140c0I0e0d0/0s011$1M010l0$0y0d1c0y1W2123281(2b1!2e0i2g040a0w0h0W0F0I0F0c0K17190Y1 0W0W0y0g2B1p2i0d1x0J1}2N0P1{1`1|0V2k0/1S0d2d2y1W1H1J0*1%2X0K2Z0d1@1I1W0I2G1x2L2N2^0`22192)292.0W0~0u0@0O2K2|0^2{2j2~1(30320@0s3623382L2W013d0e33040v3h2M0_3k3b0/3n3p0n3s3j2|3l3y0@0S3B1y2?1p2%2Q0V2U3l0g1@2q0X1I1x2=0y2@373I3R0Y3Z3a1L1(0G0@0Y0l3I3v3*0/0q0@0w3:3D3w3m0l0@0!0$1!3`3)2*010?040x432}3=3m0@0 0D2G4a3l470k0Q3B060w4p3_3;450d3 3B4r3{4c0F0@0T4w394b450i0K344n4q4x44293,040l0F0W4D4s2 0@0c0F0r0c0p4f4h1q374M4F290F3@042,4U4y4t4e0W4g0y4i3|474m4)3i4o4L4q4E3E4v502M4+3l4A044C58045a3|4u040P4=4N1(5c0E5m4,3c3 0#0u425f554}0@495y4V5t044Y4!4$4_4(2`5E0/4k4K545N014P2G0P0r0W0d5r565k4n1p3$3Y3J5*0J3M1p0P3O5/2S2O1?1^2Q0e1Z5,3M1v3(5s0/2G0i0p0l0e0G0y0p0L0v0@1h1j1l1n0w4 2`1C381w0o0e0w4R0d2I0K183_5)3l1*1R1T1V603E0D4X0|3I0J5)5g2D0h0j1}6v0I0y310Z0w0V003o0u0C0N6S0w1!1 2D4 1F3U2(4c6z1,1U2h4?292m2d2f0@2s0M0g0W0=0P2t6O0L183I3X602_3!6K5z4c4P3.4|4c4/3_5D6@3c3~5k5v5x5M7m5O5B7h4@044%4{7l5n7u044l5Q4p7d455U0Z5X5Z5f5h4c4H4J7O7I4-0@5q7T5S0d6F5G6H7B61467v7(5#405w7A7s7C7*487w4W5G4Z4#7z7^1(5P7Y7t5T0@4R4T817=5j5H7|5K7:4*7U5o4/4;877)5j7}7,5A7E5%6J3S2N783L3V5 0H0Z0P1#0e0I2=0F0g0L1#1n720e4!2z0w0z3o0K2D0V230(6(0g0,6V6X8c0(0W0C0V0r2A0(0R0w0r2Z0w0W0e0g2,1#8X0W6w3S6y1T6;6C8f3x7#1r7~7D0x0b0m0k6I6K0w8J0w0C8P150C0w8-056x3|6:6B6?7=7R040A9c8s0U1y385-0Z5v0c04.
2. Hauteur de l'arbre

Écrire la fonction hauteur qui prend en paramètre une liste représentant un arbre et renvoie sa hauteur.

Exemples
>>> hauteur([])
0
>>> hauteur([[], [], [[]]])
2

###(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

.128013[,snaRcPmy7)f]4O_wu2ql3 (6ev0;éxb+okp/ihSg1t:5=dr050W0B0S0f0N0w0d0y0h0w0f0d0d0V010S0N0L010406050d0t0j0j0f0X0k040P0J0w0t0=0J0e0y020f0j0L0E0y0g0B0 0X0v0t0B0d050M0|0~10120`0L041q1x051A0M1A1C1x0`0W0N0C0*0,0.0:0O0N0Q0O0w1Q0O0S0^050#0H0w0B1L0-0/011P1R1T1R0S1Z1#1X0S0H0J0W121Y0X1y0S0O0*150d0L0f0e0:0u011%1N010n0%0B0e1d0B1X2224291)2c1#2f0j2h040a0y0i0X0J0L0J0d0N181a0Z200X0X0B0h2C1q2j0e1y0M1~2O0S1|1{1}0W2l0:1T0e2e2z1X1I1K0+1(2Y0N2!0e1^1J1X0L2H1y2M2O2_0{231a2*2a2/0X0 0w0^0R2L2}0_2|2k2 1)31330^0u3724392M2X013e0f34040x3i2N0`3l3c0:3o3q0p3t3k2}3m3z0^0U3C3v3E3x3n0J323p0^0A3J3a2~1M3d3O3f040l3C1z2@1q2(2R0W2V3m0h1^2r0Y1J1y2?0B2^383$3/0Z3`3b3W0:0K0^0Z0n3$3w41010s0^0y473L490e0n0^0O0f170B0t0X4e402+010@040z4q3V4s0e0^100H2H4x3m4u0m0T3J0y4L4d484s43040N461r384N4f4z4B0X4D0B3C4W4r2a0J0^0V0V4%3U4G0^0b0o4J4U3j064M4|4(4y2a4Q2H0S4o0e4/4O2a0j0N0^0D4K4M4:3M4A040O564X4*4,5k4)1)595b5d4L5f494Q0n3O5o4 3d0^0d0J0t0d0r4C4E4_2N4~3m0J4b4R555L045N5g4Z4#4F3M4u4^2_4{4}5u575C5i5A5O5n5T5V4g0H0^0 0G5Z494u4w5T5v4Y5-5 5+0:4u0c5.5W5i4l0S4n4p635l1)5}5{615E5G5I4!5K2{644t0^0m0m5t5=4P0^525468495r04365;605m040I6C615j5T0`0M3}3_3%6T0M3*1q0S3,6Y2T2P1@1_2R0f1!6V3*1w3 5B0:2H0j0r0n0f0K0B0r0O0x0^1i1k1m1o0y5$3{1D391x0q1a0L4n0S0y4l0.0N0y170%0N0d0B0X7k1a0Q0F0e0F0X0f6c4o7g2c2D1$230X3/4o0N7q1#0)1I0n0n7w2e0S0)6l5H5J744^1G3=2)491+1S1U1W6:3m2n2e2g0^2t0P0h0X0?7f0i0k1~193$3^6:2`3{6S7+3M4Q456j2a5Q4d6f5p3y4i6a4m4o886h0^5~6q6g3y5X6p3{6r4H764`4|6I1)4Q4S6M308q4$6H6r4+044-8C8k044?8v3u5)5*8o01510!6B8G8T6E5c6P8x6r8V530X5S2_6x585a6F8L0:8I6L8Y8d3n5@045_8j658l8 3n4j6b6d926i8c6;93047U6n5Y994;046v8_9a5x5z9k3F5D5F7V6o8F8-8y8?5Q2-8=9b7W976t3T6R3:2O7 3)3?6Q0Z0#0%0d04.