1.理解概念
- 前缀表达式
- 中缀表达式
- 后缀表达式(逆波兰式)
中缀表达式:供我们高级动物人类所使用;
前缀表达式,后缀表达式 :供计算机所使用
2. 乱谈『后缀』和『前缀』表达式
后缀表达式是从左向右解析
前缀表达式是从右向左解析
这里强调一下:由于 运算符的优先级可能相同,则导致 这些表达式并不一定唯一。
2.1 后缀表达式
后缀表达式 又被称为:『逆波兰式』
后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,严格从左向右进行, 所有的计算按运算符出现的顺序,(无需考虑运算符的优先规则)
后缀表达式使计算机从左到右扫描,根据操作数和操作符的出现顺序直接就可以得到最后的正确结果。(无需考虑运算符的优先级关系,一切都在『酒』里…)
2.2 前缀表达式
前缀表达式,指的是不包含括号,运算符放在两个运算对象的前面,严格从右向左进行,所有的计算按运算符出现的顺序(无需考虑运算符的优先规则)
可以看出, 前缀表达式 和 后缀表达式 的唯一区别: 方向不同
- 后缀表达式是从左向右( ---->)
- 前缀表达式是从右向左(<----)
3. 相互转换
中缀表达式 转化为 后缀表达式 or 前缀表达式,都必须借助于 栈(2个) 来实现。
4. 验证结果的正确性
我们可以将表达式转化为二叉树,来通过前序遍历 或者 后序遍历 来验证转换结果是否正确。
需要注意的是,二叉树 还原为中缀表达式的操作: 中序遍历,且每当遍历到运算符时,都要加上括号来保证优先级的正确。