后缀表达式和中缀表达式的转换

何为后缀表达式

不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *

很好理解,就是一个符号只对其前面两个数作用

后缀表达式和中缀表达式的转换

如A+B*(C−D)−E/F

这是怎么搞出来的呢??

选最靠中的那个优先级最低的符号开始(±),把算数式分为2个部分,若符号数大于二,树的左儿子是左边的符号,右儿子是右边的符号,若符号不够两个,那么就把数字或字母放在相应的位置。然后又在这两个部分里进行同样的操作。

然后,树建好之后,对它进行一次后序遍历,将每个节点的值写出即可。

什么是后序遍历?就是先遍历左子树,再遍历右子树,最后遍历根节点的一种遍历顺序。

相应的有:

中序遍历(先遍历左子树,然后访问根结点,最后遍历右子树),可以得到相应的中缀表达式(就是一般算数式)

前序遍历(先访问根结点然后遍历左子树,最后遍历右子树),前缀表达式(将运算符写在前面,操作数写在后面的表达式,也叫波兰式)

扫描二维码关注公众号,回复: 4734755 查看本文章

于是A+B*(C−D)−E/F的后缀表达式就是ABCD-*+EF/-

前缀表达式就是-+A*B-CD/EF(前缀表达式在不确定中缀表达式的情况下不唯一)

当中缀表达式和前缀表达式确定时才可以确定后缀表达式,同理,当中缀表达式和后缀表达式确定时才可以确定前缀表达式

还有一种用栈的方式,直接给链接了:

原表达式转换为后缀表达式

猜你喜欢

转载自blog.csdn.net/weixin_43907802/article/details/85218432