0
后缀表达式转换为什么后缀表达式? 2 + 3 - 4/3 * 3 + 4 我真的很困惑,它如何转化为2 3 4 3/3 * - + 4 + ?. 有人可以解释一下吗?请解释postfix表达式如何在这个方程上工作?
在此先感谢
后缀表达式转换为什么后缀表达式? 2 + 3 - 4/3 * 3 + 4 我真的很困惑,它如何转化为2 3 4 3/3 * - + 4 + ?. 有人可以解释一下吗?请解释postfix表达式如何在这个方程上工作?
在此先感谢
周围缀认沽括号显示操作表彰优先级和结合的顺序:
((2 + 3) - ((4/3) * 3)) + 4
现在你可以用它来绘制语法树:
+
_________/ \_
| |
- 4
_/ \____
| |
+ *
/\ _/ \_
2 3 | |
'/' 3
/\
4 3
现在你可以通过遍历树的顺序得到postfix:
2 3 + 4 3/3 * - 4 +
还有其他的邮政命令给出正确的答案。例如,通过选择为每个交换操作符首先评估左侧或右侧子树,可以获得更多的结果。等价地,可以为每个交换操作符反转左右子树,并始终使用标准的左子元素第一次后序搜索。
您可以通过一个栈机器执行它检查顺序:
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就是答案,这与中缀评估一致。