Reconstruction
Arbre binaire presque complet à gauche
Il est possible de travailler avec un arbre binaire presque complet à gauche avec uniquement la liste donnée par le parcours en largeur, comme on l'a vu dans le cours.
- Objectif
- étant donné un autre parcours, retrouver le parcours en largeur de l'arbre.
Faire quelques expériences sur feuilles dans un premier temps.
Exemple 1
graph TB
N0("7")
N0 --> N00("2")
N0 --> N01("1")
N00 --> N000("0")
N00 --> N001("4")
N01 --> N010("6")
N01 --> N011(" ")
🐍 Script Python
# arbre correspond au parcours en largeur
arbre = [7, 2, 1, 0, 4, 6]
préfixe = [7, 2, 0, 4, 1, 6]
infixe = [0, 2, 4, 7, 6, 1]
suffixe = [0, 4, 2, 6, 1, 7]
Exemple 2
graph TB
N0("13")
N0 --> N00("17")
N0 --> N01("41")
N00 --> N000("71")
N00 --> N001("19")
N01 --> N010("53")
N01 --> N011("11")
N000 --> N0000("23")
N000 --> N0001("37")
N001 --> N0010("73")
N001 --> N0011(" ")
N010 --> N1000(" ")
N010 --> N1001(" ")
N011 --> N1010(" ")
N011 --> N1011(" ")
🐍 Script Python
# arbre correspond au parcours en largeur
arbre = [13, 17, 41, 71, 19, 53, 11, 23, 37, 73]
préfixe = [13, 17, 71, 23, 37, 19, 73, 41, 53, 11]
infixe = [23, 71, 37, 17, 73, 19 ,13, 53, 41, 11]
suffixe = [23, 37, 71, 73, 19, 17, 53, 11, 41, 13]
Exercice
Coder une fonction reconstruction qui prend en paramètres une liste parcours d'étiquettes et une chaine de caractères parmi ("préfixe", "infixe", "suffixe") et qui renvoie l'arbre binaire presque complet à gauche associé, sous la forme d'une liste obtenue avec son parcours en largeur.
Il sera autorisé, pour cet exercice, de faire muter le paramètre
parcours. Il peut être détruit à la fin du traitement.
Indices
- Commencer par faire de nombreux tests sur feuille.
- Commencer par écrire la version
"préfixe" - On pourra commencer par
- initialiser la taille de l'arbre
- inverser la liste du parcours, pour la considérer comme une pile ensuite
- initialiser un arbre, avec une liste remplie de
None
- On pourra créer une fonction récursive
travaillequi réalise le parcours demandé, mais au lieu de construire la liste l'épuisera pour compléter les étiquettes des nœuds.
Guide
🐍 Script Python
def reconstruction(parcours, ordre):
"Renvoie la reconstruction un arbre presque complet à gauche"
n = len(parcours)
parcours.reverse()
arbre = [None for _ in range(n)]
def travaille(i):
"Complète l'arbre à partir de l'indice i du parcours"
...
travaille(0)
return arbre
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
.128013]x,59/f.q78r;nb N_o=ylaepcwgu)vd*4613kRméhtsP(S0à+2Cè[i:050G0y0R0x0%0w0S0q0A0w0x0S0S0u010R0%0z010406050S0D0O0O0x0m0v040V0t0w0D0|0t0o050g13151719110z04051p1i1s0g1p110G0%0F0;0?0^0`0Q0%0C0Q0w1G0Q0R0 050,0p0w0y1B0@0_011F1H1J1H0R1P1R1N0R0m1q0R0Q1T1D010h0.0y0o0x0O0y010;1c0S0z0x0o0`0Z1N1~201.1V1;1R1@1_0 0a0q0T0m0t0z0t0S0%1f0o0q0*1|0m0m0y0A2n1i250o1q0g1,2A1)1+1*1O0G270`1J0o1?2k1N1y1A0=1U2K0%2M0o0t2Q1N0z2t1q2y2A2(121 2o2S1/2X0m160w0 0q0K2x2,102+262.1V2:2=2@0Z2`202|2y2J01310x2?040q0L352z11382 0`3b3d0q0I3h372,393n2@0e3r3j3t3l3a0t2;3c2@0J3y2}2-1C303D323e0k3I3k3L3m3N3F3e0l3R3A3T3C3E3o0f3Z2~3#3v040K0W3*3K2T3$3O0K2_1j2{3z3+3?3-0K343{363}3=2/3V3d0K3g433i3J3u480 0K3q4c3s3~473%4h3x4k454f4o3.3H4r4e3B403Q4x3S3 4g3.3Y4C3!4E4u0K3)4I4m3M4u0Z3:4k1t2$1i2Q2D0G1+2I3B0A2Y1`1q4Y1r4W2*4U4(0*2%4J1/0M0 0*0h3r4y3#0B2@4}4D2/0h0 2t4(0o0S1)0D2v0%1g524@1V0~040U5g4P3m0 1 0m4(0D0m0S5m465i0 0d3r0q4~3 0 3D0G2t5w395j0E0(3y0q5P5C531V0S2304010N1?0F0t0%1S0?0q571g5a0m5c2n0q0D2o170p2t0q2#0y0S0j0D1S4(0O0z1R0R0q0X0q0C0x5c0Q1`5O5Q5D2/0 1h4k5R5h0`0t0 0u5B6f300p0 2a5J3B5j5l4U5S5o045q5s5u6w3#5L6d5P6r6C6E0t5t5v6A6l016n040i6H5E042t0F0y5u0y6Y1/6y0E6K6k5n3a0 5?5I6j6M6U6o6q6B015j0$6*1V0M0A0 0r1g6)6^6}4_040h3D6|6T0o0 0s7f6:0t50042V7k5x3m6t6!200C782*6}6y716C6i7y6T5L0b3y065Q6/7r017b4{7B017n5C6S6:0o55041)0x0F0-0w1R7Q7A7U7M7h7o7)0 5M6.7K6_5U0 010!0t610w0#0R5%006?1S665q0|0m2p812V1y0A1S0%2p0D5_176F0S017=6e7a0 0%4|797g8q7q396V020w0R0n8w4z6h7/045N4r7K8K8o6T7b8r8D3,5F0m5H7x2{7L8x6o6p8t6:7^5W2#0P1;0c6c7+5K0 8I2(7J8L8@6L6}7-838G708.8E7.8 6I0 7H8#7M6V8!2(8X906O6Q7Q6V6X926Z2j0z8G0U6-8J8^8M7V0 7Z7#0.7(9i6+0 6z7E6:0O0%0 429a6_6V0H8Q6Z0%9M1/6V0Y9P1V9E4h8G9o8=9q9r7M8O8s9I8`8S8U9T6m8Z9-018%012V8+8-9C7M5j8;3|9!8L6_8{0m5@8V366_6 7Q7-9O9y5y04959)6T989:7-9d6Gac9.6Wa95p2i9m9Y9~9 a19t0m7!7$9x9`8/5k7Q9V049H8W9J0 9L963u8vaO3B9R9:aHaJa67z7:8na08p7o9(aK9*045G6@ag7l9/aR3#9=130h9^8man6~8:a!9qax048|a{a8a{aa8Gafa)ah6{a;9j8j6PamaDaS0 9hbh8R6Dasb39Aau448?8_8u7Yaz9v7%a52za79AaG9F044Tbl3?6J9pbu6:7b2t0R5t7Db99sb1a3a-3|1i4;0y2A5`2A4,2B4!1i2Eb,0x1Qb#4X1z2|0g0*0,0.0S04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)