[英]postifx to infix binary expression tree (parenthesis) using stack
我有一個程序(c ++),我正在編寫將后綴表達式轉換為中綴的地方
后綴示例:ab + cde + * *轉換為中綴:(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);
}
}
所以我的問題是正確放置括號。 任何幫助將不勝感激,這是周末,所以我的助教/老師沒有回到我身邊。
編輯:多余的括號是不允許的。 必須在必要時適當放置它,而在不必要時則不必放置。
您不需要知道運算符的優先級。 它已經隱含在后綴中。 輸出它們時,只需在每個操作數-運算符-操作數元組的周圍加上括號。 因此,例如, ab+
變為(a+b),
abc++
變為(a+(b+c)).
因此,只需在printInfixExpression()
的開頭輸出一個“(”,並在其結尾輸出一個“)”。 您會得到多余的括號,但您的疑問中沒有任何關於抑制括號的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.