前言
最近做面试题的时候碰到了前缀、中缀、后缀表达式的问题,题目如下:
表达式“X=A+B*(C-D)/E”的后缀表达式?
看到这里有点蒙,于是赶紧google,记录一下学习新得吧
概述
前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz,所以前缀表达式也叫做“波兰表达式”
后缀表达式(Postfix Notation)与之相反,是指运算符写在操作数后面的不包含括号的算术表达式,也叫做逆波兰表达式
中缀表达式(Infix Notation)就是常用的将操作符放在操作数中间的算术表达式。前缀表达式和后缀表达式相对于中缀表达式最大的不同就是去掉了表示运算符优先级的括号
与二叉树关系
前缀表达式对应于二叉树的前序遍历
中缀表达式对应于二叉树的中序遍历
后缀表达式对应于二叉树的后序遍历
根据中缀表达式生成二叉树
腾讯笔试题目:表达式“X=A+B*(C-D)/E”的后缀表示形式可以为?
按照操作符的优先级,其二叉树的生成过程:
1.括号的优先级最高,根为-,左孩子为C,右孩子为D
2.接下来是乘法,根为*,左孩子为B,右孩子为1的树
3.接下来是除法,跟为/,左孩子为2的树,右孩子为E
4.接下来是加法,根为+,左孩子为A,右孩子为3的树
5.接下来是=号,左孩子是X,右孩子是4的树
剩下的就是前序和后序遍历二叉树即可,代码都会写,还在乎遍历吗
因为,后序遍历序列是: XABCD-*E/+=