我有我正在寫在那裏我轉換後綴表達式來綴postifx使用堆
例 後綴的程序(C++),以中綴二進制表達式樹(括號)轉換爲綴:(A + b)*(C *(d + E))
您通過遍歷 「inorderly」 通過二進制表達式樹
我打印出表達的recursiving功能做到這一點正確的,但我不能完全弄清楚如何將pativehesis放在正確的位置。 我的最佳嘗試是結果(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);
}
}
所以我的問題越來越括號放置正確任何幫助將不勝感激,這是週末,所以我的助教/老師還沒有回到我身邊。
編輯:冗餘括號是不允許的。它必須在必要時適當放置,但不是在沒有必要時放置。
這是一個很好的解決方案,沒有想到它那樣。不幸的是,我不能有多餘的括號......對不起,在寫作中不包括 – user3050491
另一件事,我不知道爲什麼你會有一棵樹。 Postfix不是一棵樹,它是線性的。你只需要一串操作數和操作符,然後使用堆棧來評估它們。 – EJP