请解释后缀表达式如何对这个等式起作用?
Please explain how does postfix expression work on this equation?
下面的中缀表达式翻译成什么后缀表达式?
2 + 3 - 4 / 3 * 3 + 4
我真的很困惑它如何转换为 2 3 4 3 / 3 * - + 4 +?。
有人可以解释一下吗?
提前致谢
在中缀周围加上括号以显示遵循优先级和结合性的操作顺序:
((2 + 3) - ((4 / 3) * 3)) + 4
现在你可以用它来画语法树了:
+
_________/ \_
| |
- 4
_/ \____
| |
+ *
/ \ _/ \_
2 3 | |
'/' 3
/ \
4 3
现在您可以通过按 post 顺序遍历树来获得 post修复:
2 3 + 4 3 / 3 * - 4 +
还有其他 post 个命令给出了正确答案。例如,您可以通过选择先为每个可交换运算符评估左子树或右子树来获得更多。等效地,您可以反转每个可交换运算符的左右子树,并始终使用标准的左子优先 post 顺序搜索。
可以用栈机执行查看顺序:
Stack
read 2, push 2 [2
read 3, push 3 [2 3
read +, pop 3, pop 2, push 5 (i.e. 2 + 3) [5
read 4, push 4 [5 4
read 3, push 3 [5 4 3
read /, pop 3, pop 4, push 1.33... (i.e. 4/3) [5 1.33...
read 3, push 3 [5 1.33... 3
read *, pop 3, pop 1.33..., push 4 (i.e. 1.33... * 3)[5 4
read -, pop 4, pop 5, push 1 (i.e. 5 - 4) [1
read 4, push 4 [1 4
read +, pop 4, pop 1, push 5 (i.e. 1 + 4) [5
所以答案是5,符合中缀评价
下面的中缀表达式翻译成什么后缀表达式? 2 + 3 - 4 / 3 * 3 + 4 我真的很困惑它如何转换为 2 3 4 3 / 3 * - + 4 +?。 有人可以解释一下吗?
提前致谢
在中缀周围加上括号以显示遵循优先级和结合性的操作顺序:
((2 + 3) - ((4 / 3) * 3)) + 4
现在你可以用它来画语法树了:
+
_________/ \_
| |
- 4
_/ \____
| |
+ *
/ \ _/ \_
2 3 | |
'/' 3
/ \
4 3
现在您可以通过按 post 顺序遍历树来获得 post修复:
2 3 + 4 3 / 3 * - 4 +
还有其他 post 个命令给出了正确答案。例如,您可以通过选择先为每个可交换运算符评估左子树或右子树来获得更多。等效地,您可以反转每个可交换运算符的左右子树,并始终使用标准的左子优先 post 顺序搜索。
可以用栈机执行查看顺序:
Stack
read 2, push 2 [2
read 3, push 3 [2 3
read +, pop 3, pop 2, push 5 (i.e. 2 + 3) [5
read 4, push 4 [5 4
read 3, push 3 [5 4 3
read /, pop 3, pop 4, push 1.33... (i.e. 4/3) [5 1.33...
read 3, push 3 [5 1.33... 3
read *, pop 3, pop 1.33..., push 4 (i.e. 1.33... * 3)[5 4
read -, pop 4, pop 5, push 1 (i.e. 5 - 4) [1
read 4, push 4 [1 4
read +, pop 4, pop 1, push 5 (i.e. 1 + 4) [5
所以答案是5,符合中缀评价