前缀、中缀、后缀表达式求解及转换总结
一、求解类问题有如下几种形式:
1. 前缀求解:递归
2. 中缀求解:双栈
3. 后缀求解:递归
三类表达式求解问题,其中中缀最复杂,需要维护两个栈,同时也可以理解为什么要构造出前缀与后缀表达式了,因为前后两种表达式都利用了计算机求解逻辑,去除了括号而天然的保留了求解顺序,更符合计算机用栈求解的过程,实现起来也更容易。
二、转换类问题有如下几种:
1. 前缀转中缀:递归
2. 前缀转后缀:树
3. 中缀转前缀:栈
4. 中缀转后缀:栈
5. 后缀转前缀:树
6. 后缀转中缀:递归
中缀转其他两种,都可以用补全括号法来实现,补全括号法可以用递归实现:
1. 遍历字符串,找到未被括号包括的最高优先级操作符,没有则结束,有则记录左右括号插入点。
2. 插入左右括号,继续循环遍历。
3. 全部插入后,移动操作符。
4. 去除括号。
所有的转换,都可以用遍历树的方法来实现,表达式(4 + 2) * (3 + 6)的树结构如下图:
-----------------*------------------
------------/-----------\-----------
--------+----------------+---------
------/----\------------/-----\------
----4-------2---------3-------6----
前缀、中缀、后缀分别对应树的先序、中序、后序遍历结果。
三、知识点
树结构:先序、中序、后序遍历
递归:树与递归的关系
栈:栈与递归的关系
字符串处理:stringstream自由转换string与其他类型,多次使用之间需要clear() & str("")
转载请注明引用自:
http://www.cnblogs.com/breakthings/p/4051926.html