2017-09-21 46 views

回答

1

周围缀认沽括号显示操作表彰优先级和结合的顺序:

((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就是答案,这与中缀评估一致。