Maintenant, j'ai cet algorithme d'impression simple qui imprime des parenthèses parfaites. Le problème est, les parenthèses ne sont pas toujours nécessaires, et j'ai besoin de comprendre comment ne pas les imprimer quand ils ne sont pas nécessaires.Arborescence d'expression binaire C++: comment imprimer une expression infixe avec des parenthèses appropriées?
Ma fonction actuelle:
void printIn(Node* t){
if(t!= NULL) {
if(isleafNode(t))
cout << t->element;
else {
cout << "(";
printIn(t->left);
cout << t->data;
printIn(t->right);
cout << ")";
}
}
Le problème ici est que certaines expressions Postfix, telles que 2 50 + 8 + peuvent être imprimées en infix que 2 + 50 + 8 instad de ((2 + 50) + 8))
Voici un tableau de suffixes à infixer à quoi cela devrait ressembler. Le mien ajoute juste des parenthèses autour de l'extérieur, et à toute l'addition n'importe quoi.
4 50 6 + + 4 + (50 + 6)
4 50 + 6 + 4 + 50 + 6
4 50 + 6 2 * + 4 + 50 + 6 * 2
4 50 6 + + 2 * (4 + (50 + 6)) * 2
a b + c d e + * * (a + b) * (c * (d + e))
Voici un tableau de la façon dont le mien regard:
4 50 6 + + (4 + (50 + 6))
4 50 + 6 + ((4 + 50) + 6)
4 50 + 6 2 * + ((4 + 50) + (6 * 2))
4 50 6 + + 2 * ((4 + (50 + 6)) * 2)
a b + c d e + * * ((a + b) * (c * (d + e)))
Comment puis-je réparer mon algorithme pour éliminer entre parenthèses supplémentaires? p faut garder à l'esprit que j'ai une fonction getPrecedence (string) qui renvoie 1 pour priorité élevée (* ou /) et 0 pour priorité faible (+ ou -)
La fourniture d'informations supplémentaires pour l'expression pour avoir des parenthèses n'est-elle pas une option? – SenselessCoder
@SenselessCoder 'Information additionnelle' 'comme quoi? Tout ce qui est requis est déjà fourni dans l'expression postfixe et dans l'arbre d'expression – EJP