我應該使用表達式樹來評估後綴表達式。假設我有這樣的使用C++中的樹評估後綴表達式
-
/\
+ *
/\/\
a b c d
我首先需要計算A + B子樹,並將其結果存儲在+節點,則c * d等,直到我有結果的根節點的一棵樹。
我嘗試了使用堆棧的遞歸方法,但那不起作用。的僞代碼看起來是這樣
- 函數eval(節點)
- 的eval(節點 - >左)
- 的eval(節點 - >右)
- 如果(節點是葉節點) 推在堆棧上
- else if(節點是操作數) 從棧中彈出和彈出b node-> value = a-> op操作b->值 delete ab;
但是這沒有奏效。我還必須在每一步顯示樹,以顯示節點正在減少。 我GOOGLE了很多次,但我無法找到所需的答案。 任何人都請幫助我如何做到這一點。
void expression_tree::evaluate(node *temp)
{
if(!temp)
return;
/// stack_postfix obj;
stack_postfix obj2;
evaluate(temp->left);
evaluate(temp->right);
if(temp->right == NULL && temp->left == NULL)
{
obj2.push(temp);
}
else
{
node * a = obj2.pop();
node *b = obj2.pop();
temp->value = a->value + b->value;
delete a;
delete b;
}
}
究竟沒有工作?請顯示相關代碼並準確描述哪些方法無效。 –
您需要在步驟5中將結果值壓入堆棧 – Erbureth
遞歸方法不使用堆棧explicilty:它使用當您執行遞歸時自動獲取的激活幀堆棧。 – EJP