以下中缀表达式转换为什么后缀表达式? 2 + 3 - 4/3 * 3 + 4 我真的很困惑它是如何转化为2 3 4 3/3 * - + 4 +? 有人可以解释一下吗?
提前致谢
答案 0 :(得分:1)
将句子放在中缀周围以显示遵循优先级和关联性的操作顺序:
((2 + 3) - ((4 / 3) * 3)) + 4
现在您可以使用它来绘制语法树:
+
_________/ \_
| |
- 4
_/ \____
| |
+ *
/ \ _/ \_
2 3 | |
'/' 3
/ \
4 3
现在您可以通过按顺序遍历树来获取后缀:
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,这与中缀评估一致。