Hauteur et taille d'un arbre⚓︎

Dans tout le sujet, ici, arbre désigne un arbre enraciné. On rappelle que les arbres binaires ne sont pas des arbres enracinés.

On rappelle la définition d'un arbre : il s'agit d'une racine qui possède (souvent une étiquette et) \(0\), \(1\) ou plusieurs sous-arbres qui sont des arbres. Un arbre enraciné qui ne possède pas de sous-arbre est appelé feuille.

On modélise ici des arbres enracinés sans étiquette par des listes Python : la liste des sous-arbres.

Utilisation

Cette modélisation permet d'écrire des constructions du genre

🐍 Script Python
for sous_arbre in arbre:
    action(sous_arbre)

Ou alors des listes en compréhension

🐍 Script Python
[action(sous_arbre) for sous_arbre in arbre]

Dans cet exercice, la définition de la hauteur d'un arbre est le nombre maximal de filiations pour rejoindre la racine à une feuille.

  • Une feuille est donc modélisée par [] ; sa hauteur est zéro.

  • L'arbre représenté par [[], [], [[]]]

    • désigne une racine qui 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.
    • Sa hauteur est \(2\).
    • Il se dessine ainsi :
graph TD
    R{ } --> N1{ }
    R    --> N2{ }
    R    --> N3{ }
    N3   --> N4{ }

Écrire deux fonctions telles que :

  • hauteur(arbre) renvoie la hauteur de l'arbre enraciné donné en paramètre.
  • taille(arbre) renvoie la taille de l'arbre enraciné donné en paramètre.

Dans cet exercice, on pourra utiliser les fonctions prédéfinies max et sum.

Exemples
>>> hauteur([])
0
>>> hauteur([[], [], [[]]])
2
>>> taille([])
1
>>> taille([[], [], [[]]])
5
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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
.128013[(lbsS]etxph4rd5f1890uma"ov+w7g_/3=in 6k:)y 2Pc030j0c0d0s0E07090M0P070s09090D0t0d0E0f0t020G03090q0r0r0s0i0L020a0u070q0)0u0F030B0:0=0@0_0.0f020319121c0B190.0j0E0v0Y0!0$0'0g0E0z0g071q0g0d0,030T08070c1l0#0%0t1p1r1t1r0d1z1B1x0d0i1a0d0g0Y0|090f0s0F0'0N0t1D1n0t0l0V0c0F0s0r0c1x1W1Y1%1F1)1B1,1.0,040M0O0i0u0f0u090E0 0F0M0R1U0i0i0c0P26121;0F1a0B1S2j1P1R1Q1y0j1?0'1t0F1+231x1i1k0Z1E2t0E2v0F0u2z1x0f2c1a2h2j2N0/1X272B1'2G0i0?070,0M0m2g2R0-2Q1=2T1F2V2X2Z0N2$1Y2'2h2s0t2,0s2Y020M0C2:2i0.2?2*0'2_2{0M0h2 2=2R2@352Z0k39313b332^0u2W2`2Z0H3g2(2S1m2+3l2-2|0y3q323t343v3n2|0n3z3i3B3k3m360o3H2)3J3d020m0p3O3s2C3K3w0m2#132%3h3P3X3R0m2/3$2;1d2L122z2m0j1R2r3j0P2H1/1a3=1b3:2P3-2i033{0R2M3I3X0I0,0R0l390M3r3c0l0,0g0s0~0c0q0i394h3j0+02064r3A3)0,0@082c4x491'4u0K0J3g0M4L4g4y1'4b020E4e432|4s3Q4A0i4C0c4f4W3X0u0,0D0D4$4O1F4u050b4J4U0G4M4^4N4F1F4Q2c0d4p114U4`3(1'0r0E0,3U4?4^4%4P0,0c0W4#4U5c4.0,4=2N4@4_4L5j0'4}0S504,4{0'560,3#2N533W1'4(020w5w542+080,0?0e4E5K0'4u4w5i4-344k4m0d4o4q5V5x0t5T5Q5E2+0,090u0q090A4B4D5%5R5(0,0K5J5+5s0,0l3l5}3c5-5/5;5?5h5C5r0t0u0x0,2E633j0F4Y4!5*2@4H3g0G3'5~0t4Q4d6h3Q4j020T0V1B6m4t0,5U2P5W2^6k5@6H5'4H5m3%5b6I4Q4S6w4z02686V5F4)4+526b4/4;4K5p5D2@5t4 0i516a6I5z3S6*5q6S5e5g6D3J4u6P2;5o5p6b6.5v6%6?576^785'5G5I7c5_0F5M02146~3X5)5^6s6j6z0U076C7p6n6F7m2U655:5=4Z6L2%6'5{6Z4|60627g7q7B677E692%6,3j6d6f6;7T6b7r6Y7w6E025|4?12460c2j2K7-3;1j3?2m2p2k0s1A7:0B3=0.7}0S7t0902.