前(中/后)缀表达式
后缀表达式和中缀表达式
后缀表达式(Postfix Notation),是指运算符写在操作数后面的不含括号的算术表达式,也叫做逆波兰表达式。比如1 2 3 + -
前缀表达式和后缀表达式相对于人们常用的中缀表达式最大的不同就在于表达式中的运算符是按照一定的顺序出现(接下来会具体讲解),所以求值过程中并不需要在表达式中使用括号来指定运算顺序,也不需要在计算过程中其中考虑运算符号的优先级。在采用辅助数据结构的情况下,只需要对表达式进行一次遍历即可计算出结果,耗时O(n)。
* 后缀表达式运算实现 *: 当见到一个数时就把它推入栈中;在遇到一个运算符时该运算符就作用于从该栈弹出的两个数,将结果推入栈中。
* 中缀转后缀 *:
1. 数字秒弹
2. 左括号压入栈,遇到相应的右括号则将对应的一对括中的元素弹出
3. 当操作符(如果是+)要被压栈时候,比较栈顶操作符(如果是)和当前操作符优先级,如果当前操作的原先级低,则将栈顶操作符弹出,再弹出当前操作符(先弹出 ,再弹出+)
表达式树
表达式树的树叶是操作数(operand), 其他节点是操作符
可以通过(左,节点,右)的方式递归打印表达式树,得到中缀表达式(infix expression),这种遍历策略即是中序遍历.
如果是按照左子树、右子树、节点的递归打印顺序,则得到后缀表达式,这种遍历策略是后续遍历。
先打印节点运算符,再递归打印右子树、左子树,得到前缀表达式,遍历策略是前序遍历。