我应该使用表达式树来评估后缀表达式。假设我有一棵这样的树
-
/ \
+ *
/ \ / \
a b c d
我首先需要评估 a+b 子树并将其结果存储在 + 节点中,然后 c*d 等等,直到我将结果存储在根节点中。
我尝试了使用堆栈的递归方法,但这不起作用。伪代码看起来像这样
- 函数评估(节点)
- 评估(节点->左)
- 评估(节点->右)
- if(node 是叶节点) 将其压入堆栈
- else if(node is an operand) pop a and pop b from stack node->value = a->value op b->value delete ab;
然而这并没有奏效。我还必须在每一步都显示树,以显示正在减少的节点。我用谷歌搜索了很多次,但我找不到所需的答案。任何人都请帮助我如何做到这一点。
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;
}
}