Aller au contenu

Expression parenthésée⚓︎

Une expression arithmétique ne comportant que les quatre opérations \(+, - , ×, ÷\) peut être représentée sous forme d'arbre. La disposition des nœuds indique les priorités opératoires.

  • Les feuilles représentent des nombres, elles ne possèdent pas de sous-arbre.
  • Les nœuds internes représentent des opérateurs binaires, ils possèdent exactement deux sous arbres.

Par exemple, avec un parcours en profondeur infixe de l'arbre ci-dessous, on peut retrouver l'expression notée habituellement : \(((3 × (8 + 7)) - (2 + 1))\).

arbre

La classe Noeud ci-après met en œuvre une structure d'arbre adaptée.

Il ne s'agit pas exactement d'un arbre binaire

Avec un arbre binaire, tous les nœuds ont exactement deux sous-arbres. Un sous arbre peut alors être vide.

Ici, il s'agit d'un arbre d'expression pour opérateurs binaires. C'est un arbre d'arité 2 ; il n'y a pas, ici, de notion d'arbre vide. Ici, chaque nœud possède 0 ou 2 sous-arbre.

Compléter la fonction récursive expression_parenthesee qui prend en paramètre un objet de la classe Noeud qui désigne la racine d'un arbre et qui renvoie l'expression arithmétique représentée par l'arbre passé en paramètre, sous forme d'une chaine de caractères contenant des parenthèses.

Exemple

Résultat attendu avec l'arbre ci-dessus :

>>> somme_1 = Noeud(Noeud(None, 8, None), '+', Noeud(None, 7, None))
>>> somme_2 = Noeud(Noeud(None, 2, None), '+', Noeud(None, 1, None))
>>> produit_1 = Noeud(Noeud(None, 3, None), '*', somme_1)
>>> expression = Noeud(produit_1, '-', somme_2)
>>> expression_parenthesee(expression)
'((3*(8+7))-(2+1))'

D'autres exemples

>>> feuille = Noeud(None, 5, None)
>>> expression_parenthesee(feuille)
'5'
>>> somme = Noeud(Noeud(None, 2, None), '+', Noeud(None, 3, None))
>>> expression_parenthesee(somme)
'(2+3)'
>>> somme = Noeud(Noeud(None, 2, None), '+', Noeud(None, 3, None))
>>> produit = Noeud(Noeud(None, 4, None), '*', somme)
>>> expression_parenthesee(produit)
'(4*(2+3))'
###(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.339_Ce,l8:ynb0uik(2c7èam.S)rN9 15s/é?-LxR6gào+t=hd3Pfvp;wU4q050W0e0T0v0o0g0G0D0s0g0v0G0G0U010T0o0#010406050G0n0w0w0v0A0j040y0R0g0n0~0R0k0D020v0w0#0$0D0N0e180A0*0n0e0G050H1517191b130#041z1G051J0H1J1L1G130W0o0!0?0^0`0|0V0o0P0V0g1Z0V0T11050.0l0g0e1U0_0{011Y1!1$1!0T1,1.1*0T0l0R0W1b1+0A1H0T0V0?1e0G0#0v0k0|0r011:1W010Z0:0e0k1m0e1*2b2d2i1=2l1.2o0w2q040a0D0Y0A0R0#0R0G0o1h1j0,290A0A0e0s2L1z2s0k1H0H272X0T2524260W2u0|1$0k2n2I1*1R1T0@1;2+0o2-0k211S1*0#2Q1H2V2X32142c1j2?2j2{0A180g110D0E2U3612352t381=3a3c3e0r3h2d3j2V2*013o0v3d040D0X3s2W133v3m0|3y3A0D0)3E3u363w3K3e0F3O3G3Q3I3x0R3b3z3e0O3V3k371V3n3!3p3B0t3)3H3,3J3.3$3B0h3=3X3@3Z3#3L0C3}3l3 3S040E0m443+2@403/0E3g1A3i3W454d470E3r4i3t4k4c393_3A0E3D4q3F3*3R4v110E3N4z3P4l4u414E3U4H4s4C4L483(4O4B3Y4n3;4U3?4m4D483|4Z3~4#4R0E434)4J3-4R0r4a4/4t4;3/0r4h324P4W4$0r4p4~4V46514y544!4K4{4G594*5b3`0r4N5e4:3^4=4T5k4_5m4{4Y5p4Q4{4(5u504=4.5y564R0X4@341M301z2;2!0W2(3w0s212A0+1S1H2 0e313i3O055Q0,5Y5l010p113m5!5a1=0%3e5.5f3n0s110B0R0e0n0W5?5)10040i4b3w5;3B0D69605q010G0W11016h653Y6e3e690D0d3,1/0o1n0g0I2z0k0.6x0D0n1j0k0b5~0D1R2b2I2d0T6G1/0X0D0v1{0A0o0l1g0=644^3w6l68690K0D0!3z5}0A0D0i0D0^6(6*0n6,2N0g000I0~1v0-0T0e0f6j3 6!6n0D6%0P0v0n0s0V1/6.1.0D0G0R0n0G0K190l2Q0D0Q0D787a7c0x724d746n6%0W2F2K7d6/1/7h7j7l0A7n1/7q7B0R7D7v4O4 736f6#6o1/0k001x6L2c0G0f0D0o0s0o7)2H6?6A1j7m7o0l2_0/2Q7)180o0=7/6,6B6P7K7o0W00192K0I0D0r7R5C7x7V756h013V75554d5+040,0Z6b665=4H8m2j0Z0w110c0c2_2K8B8s3Y620q8G3 0l620G0e0g8r8v5/0|62714H0D8w3n117s7b0e8K4d8V3O8Y8T3x116)1.6?8)2j8+8X8Z3J117O7D8@1=620z6X4~758l8.8M118O8Q900|0R118d5Z8.0k8#798%8,8{019f040U9o9j9l7t8(4O966n9p99049b8R348.9r9h3t9p9k048;6+9u5@9e119t8`9v9O6=0A8k9A8-9S019D9F9d9q9g9,9N8~6 9R5)9r9V329%5)9:7C9=7S979(8o8q9,678Y8S9(0k0Z117#0c0Z5}0:1.9,8I9,9*8P9G9i9(92944j9$9{6c0G2g04011r0k0!7P1/82201e0I2n7)6:0A0I2H0k8O7p6-7F0D6D6F7#0K0:7;1/af0nah1/0J8j9z9$9p8o2Q0T6?0k9?6cam9ca89@9.a|6c9N8$7ca^3w0R677~b43Y0p5_045{2-b93 b6112d5 9W9(a`ao9L9Ia~9Ha98}9~9y9`9pbi04b8bm5)bb5`1ibx4j067T8n8}0ebp2W9pa69/ab040e0M5W0`0o1i0c2c2Q6x7c8ObIbqaq118Ja 3Racaj11939#6a8.8o0obP3B9Mb?b;3Y9J9/ac0G0Taeag0gaic33 8Ib_a-9Aa/11a;a?bg4m0l9a2#b@04b:bt9|c2cw6cc5ce4m8:9Zct0zb`av3w8o8P8Octas4rauck04cm0Aa@bD6cakciau969p0G0E11000q00cIc#9Bbr040Sco39acbX2QbZb#b%2n271x0eb,bQ8.cZczb=bV9,cBd74W9w9ncC8^b^c.c/cJc411c?cXd8d35(cAbsapcx9Y8=9!c!dkdlbhdnc@8!bVc`1x2Jc}19c b*d2ctcvdvb0cydSb5dub-dw9;dr9p92djc/bzdEdp6kc)04000zc-dAc:b.04cH4U0H5$5X1I5J0H5L1z0T5Ne32$2Y20222!0v1-d~e15U1Fds3w2Q0wae0v0p0e0c0V0X111r1t6}6W5!1M3j1G0y0o8Yd}d9d|5R3B7#a#0Da%a)7)1i7g7i0V0/6 0Db(aD0j0e6,6:9P7:0G2d7 dMb)0u8O7)0W1i0s0DeQeXaEeE5R3w1@1#1%1)ei4Wcq9Ecsdg91b/c6eGdcdD049Kd4budx9Qf78Udi8veH5%eL7b0/2-6M0?190v2S0uc{7R1P1K1c2_1ieP37e=6Q0uft0W0n0D6 0MeV0v0!2R6/002G0I0A6Q6+e{5%doeF6-1I3j0n0g3j1$040(ftc~e-aR7i0!f!6x0e7Rf;13f;0L7!dIc|1jf^270I0GaJ6GfO7H7k7?7M7r9m7caT5#eIf b29yeF1zg105g3fX0#fZf#e(7i0=0Z3.1/2NfQ6 g00of:gMg4bWbYdKg8e,gagcgHgfgD7J7LaSd!gneFf d!1zgt0Hgvf;f?1/g90Ve.a$e!18f~gL3j0Hf.g~0,0.0:0G04.