【发布时间】:2014-05-10 06:41:56
【问题描述】:
我有一个程序 (c++),我正在编写将后缀表达式转换为中缀的程序
示例 后缀:a b + c d e + * * 转换为中缀: ( a + b ) * ( c * ( d + e ) )
你可以通过“无序”遍历二叉表达式树来做到这一点
我有一个递归函数可以正确打印出表达式,但我不太清楚如何将括号放在正确的位置。 我最好的尝试是结果 ( a + b ) * ( c * ( d + e //但我不能正确放置结束括号而不弄乱其他部分
这是产生此结果的函数(我很确定我需要重新考虑我的策略以获得一致的结果:
//isHigher is a lamba function that checks for higher precedence operators (*, /)
//isoperator checks if its an operator (+, - , / * )
void BET::printInfixExpression(BinaryNode *n)
{
if(n->left != NULL)
{
if(isOperator(n->left->element) && isHigher(n->element) && !isHigher(n->left->element))
cout << "( ";
if(isHigher(n->element) && !isOperator(n->left->element))
cout << "( ";
printInfixExpression(n->left);
}
if(isHigher(n->element) && isHigher(n->right->element))
cout << ") ";
cout << n->element << " ";
if(isHigher(n->element) && isOperator(n->right->element) && !isHigher(n->right->element))
cout << "( ";
if(n->right != NULL)
{
printInfixExpression(n->right);
}
}
这是输出不带括号的中缀的原始函数:
void BET::printInfixExpression(BinaryNode *n)
{
if(n->left != NULL)
{
printInfixExpression(n->left);
}
cout << n->element << " ";
if(n->right != NULL)
{
printInfixExpression(n->right);
}
}
所以我的问题是正确放置括号。 任何帮助将不胜感激,现在是周末,所以我的助教/老师还没有回复我。
edit:不允许使用多余的括号。它必须在必要时适当放置,而不是在不必要时放置。
【问题讨论】:
标签: c++ stack postfix-notation infix-notation