Je fais un programme chargé de convertir une expression mathématique telle que (2+4)*(4/3)
en un arbre binaire, puis de le manipuler. Tout d'abord, lors de l'analyse, j'ai transformé la chaîne en deux piles, opérandes et opérateurs. Comment puis-je déterminer ce que la racine doit être, étant donné que dans mon exemple ci-dessus l'arbre devrait ressembler à ceci:Parse pile dans un arbre binaire?
*
/\
+ /
/\ /\
2 4 4 3
Notez que la racine est * qui est l'opérande la plus externe. Mais sur mon pile d'opérandes, il ressemble à ceci:
/
*
+
Et il pourrait y avoir des cas comme (2+4+3)*4
ou 2*((4+1)/3)
.
Comment puis-je déterminer quel opérande doit être la racine de mon arbre binaire?
Est-ce que l'analyseur comprend les règles de priorité, ou utilisez-vous toujours des parenthèses pour le forcer? –
Je dois aussi créer un analyseur (jusqu'à présent je l'ai juste trié entre les opérandes et les opérateurs, et en gardant la trace des parenthèses). Mais oui, les crochets seront toujours là (pas de règles de préséance). – Blackbinary
duplication possible de [Créer un arbre binaire à partir d'une pile?] (Http://stackoverflow.com/questions/4149437/create-a-binary-tree-from-a-stack) –