Aller au contenu

Notation de Neveu

🏷️ On considère ici des arbres étiquetés, et ordonnés.

Le cadre

Jusqu'à présent, tous les arbres avaient des enfants rangés dans l'ordre indiqué par une liste.

Plus tard, la notion d'arbre non ordonné sera abordée. En particulier lorsqu'on le définit avec les ancêtres de chaque nœud (sauf la racine) au lieu de la filiation qui donne une liste.

Pour un arbre ordonné, les sous-arbres sont alors indicés, et comme avec Python, on considère que les indices commencent à zéro.

Indiquer un nœud d'un arbre

Pour les besoins de cet exercice, on définit une adaptation de la notation de Neveu.

Pour un arbre ordonné, on peut avec une liste d'indices rejoindre n'importe quel nœud.

Avec l'arbre suivant

graph TB
    N0(5)
    N0 --> N1(9)
    N0 --> N2(5)
    N0 -->|2|N3(11)
    N1 --> N4(4)
    N2 --> N5(1)
    N2 --> N6(8)
    N3 --> |0|N7(8)
    N3 --> N10(2)
    N5 --> N8(6)
    N7 --> |0|N9{3}
    N9 --> M(5)

Et la liste [0, 0, 2] on peut indiquer le nœud ayant l'étiquette 3.

En effet, en lisant la liste en partant de la fin et en partant de la racine :

  • On prend le sous-arbre d'indice 2 (celui ayant une racine de 11).
  • On prend la sous-arbre d'indice 0 (il porte une étiquette 8).
  • On prend la sous-arbre d'indice 0 (il porte une étiquette 3).

Exercice

Coder une fonction neveu qui prend un arbre étiqueté et une liste filiation en paramètres et qui renvoie l'étiquette du nœud de l'arbre indiqué par la filiation suivant la notation de Neveu.

👍 On garantit que les paramètres sont cohérents et qu'il n'y a aucune vérification à effectuer.

👍 La liste filiation pourra être détruite lors de l'appel à neveu.

###(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 : /
.339.128013],59/f.q78rnb _o=ylaepcwgu)vd4613kRméhtsP(S2[i:050E0w0O0v0V0u0P0p0y0u0v0P0P0s010O0V0x010406050P0B0L0L0v0m0t040S0r0u0B0;0r0n050g0{0}0 110_0x04051h1a1k0g1h0_0E0V0D0)0+0-0/0N0V0A0N0u1y0N0O0@050!0o0u0w1t0,0.011x1z1B1z0O1H1J1F0O0m1i0O0N1L1v010h0$0w0n0v0L0w010)140P0x0v0n0/0T1F1?1^1$1N1)1J1,1.0@0b0p0Q0m0r0x0r0P0V170n0p0Y1;0m0m0w0y2f1a1}0n1i0g1!2s1X1Z1Y1G0E1 0/1B0n1+2c1F1q1s0*1M2C0V2E0n0r2I1F0x2l1i2q2s2W0`1@2g2K1%2P0m0~0u0@0H2p2!0^2Z1~2$1N2(2*0@0T2.1^2:2q2B012^0v2+040I2|2r0_2 2?0/32340F372~2!303d0@0e3g393i3b310r2)330@0G3n2;2#1u2@3s2_040k3x3a3A3c3C3u040l3G3p3I3r3t340f3g1l2U1a2I2v0E1Z2A3q0y2Q1/1i3Z1j3X2Y1b2/053)0Y2V3P2L010J0@0Y0h3V3H3{0z0@0p413`2%0h0@2E0D0w0B472=3Q0?040R4g3z3{0n0@0 0o2l4m304j0d3g46422%0@210V0v2o3;2}3y4v0@0C0W3n0p4P4z481N0P1{04010K1+0D0r0V1K0u000M0;0j0B0Z0O1K0E0B0p0n0a0B2A2i4(4r2l0p2N1q4,0M0p1@0m0p0+0p4D4F0V18014O4Q4J3q4p040m0v0y2N0w4u3q4w4y5h3Q5j1+0h1^0O0P5t4A1N0r0@0s5C4S3c4q0m4s5p4H384Q4R4h3{3}040V405P045S4n4B045a4G2W5#305F040s5H5Z5,5r0@0U0c4N5Z065R5R5u5U0@2l0O0B0m195=605%5l5n2E5f4P691N5V0w0%5O2Y5D0/4j5{2W5}5~6f6n310@0V0q5x5z5I5T1%5.5;5+6g5K5(0$4E5*3=6v5.0i5q5v0@2b0x6S3{4j0R0C6e5~6I6w040P0r0B0P0q4}6l2/5?3Q6F6C5$2@0@6A0n5A6X1%4j0U706{5W6z0n5y6~746o0@0c6$5 6v5V6365676H6v5j4c4e7b016Z7r5j6+6-6/5M4t5Z6(5s687n4C6L5b187r4j6#5|1a3@0w2s2T7Q3Y1r3!2v2y2t0v1I7T0g3Z0_7%0Z0#0%04.