二叉树中缀表达式到后缀表达式的转换
2015-05-09 23:00
218 查看
规则:
当读到一个操作数时,立即把它放到输出中。当读到操作符时不立即输出,从而必须先存在某个地方。正确的做法是将已经见到过的操作符放进栈中而不是放到输出中。当遇到左括号时我们也要将其推入栈中。如果遇到一个右括号,我们就弹出栈中的符号并输出,直到遇到对应的左括号,并且这个左括号只弹出,不输出。
存入栈中的操作符的规则:优先级必须保持从上到下为高到低。遇到一个操作符时,我们从栈中弹出元素,直到发现有比遇到的操作符优先级更低的元素为止。例如:如果我们遇到一个*,而栈中此时的元素为 +,那我们就可以把* 存入栈中,但是如果我们遇到的是+,而此时栈中的顶元素为* +,优先级大于+,那我们就先把* +弹出并输出,再把+存入栈中。
注意:能处理左括号的只有右括号
例:
我们把
a + b * c + ( d * e + f ) * g
转换为
a b c * + d e * f + g * +
第一步
输出:a
暂存栈:
第二步:
输出:a
暂存栈:+
第三步:
输出:a b
暂存栈:+
第四步:
输出:a b
暂存栈:+ *
第五步:
输出:a b c
暂存栈:+ *
第六步:
输出:a b c * +
暂存栈:+
第七步:
输出:a b c * +
暂存栈:+ (
第八步:
输出:a b c * + d
暂存栈:+ (
第九步:
输出:a b c * + d
暂存栈:+ ( *
第十步:
输出:a b c * + d e
暂存栈: + ( *
第十一步:
输出:a b c * + d e *
暂存栈: + ( +
第十二步:
输出: a b c * + d e * f
暂存栈: + ( +
第十三步:
输出: a b c * + d e * f +
暂存栈:+
第十四步:
输出: a b c * + d e * f +
暂存栈:+ *
第十五步:
输出: a b c * + d e * f + g
暂存栈:+ *
第十六步:
输出: a b c * + d e * f + g * +
暂存栈:
当读到一个操作数时,立即把它放到输出中。当读到操作符时不立即输出,从而必须先存在某个地方。正确的做法是将已经见到过的操作符放进栈中而不是放到输出中。当遇到左括号时我们也要将其推入栈中。如果遇到一个右括号,我们就弹出栈中的符号并输出,直到遇到对应的左括号,并且这个左括号只弹出,不输出。
存入栈中的操作符的规则:优先级必须保持从上到下为高到低。遇到一个操作符时,我们从栈中弹出元素,直到发现有比遇到的操作符优先级更低的元素为止。例如:如果我们遇到一个*,而栈中此时的元素为 +,那我们就可以把* 存入栈中,但是如果我们遇到的是+,而此时栈中的顶元素为* +,优先级大于+,那我们就先把* +弹出并输出,再把+存入栈中。
注意:能处理左括号的只有右括号
例:
我们把
a + b * c + ( d * e + f ) * g
转换为
a b c * + d e * f + g * +
第一步
输出:a
暂存栈:
第二步:
输出:a
暂存栈:+
第三步:
输出:a b
暂存栈:+
第四步:
输出:a b
暂存栈:+ *
第五步:
输出:a b c
暂存栈:+ *
第六步:
输出:a b c * +
暂存栈:+
第七步:
输出:a b c * +
暂存栈:+ (
第八步:
输出:a b c * + d
暂存栈:+ (
第九步:
输出:a b c * + d
暂存栈:+ ( *
第十步:
输出:a b c * + d e
暂存栈: + ( *
第十一步:
输出:a b c * + d e *
暂存栈: + ( +
第十二步:
输出: a b c * + d e * f
暂存栈: + ( +
第十三步:
输出: a b c * + d e * f +
暂存栈:+
第十四步:
输出: a b c * + d e * f +
暂存栈:+ *
第十五步:
输出: a b c * + d e * f + g
暂存栈:+ *
第十六步:
输出: a b c * + d e * f + g * +
暂存栈:
相关文章推荐
- 栈和二叉树--中缀/后缀表达式的相互转换
- 从中缀向后缀转换表达式
- 中缀表达式转换成后缀表达式
- [栈和队列]从中缀向后缀转换表达式
- 数据结构之 栈和队列---算术表达式的转换(前缀+中缀+后缀)
- 表达式求值,中缀后缀转换,表达式递归直接求值等相关算法的实现
- IT笔试题中经常出现的前缀、中缀、后缀表达式转换问题-----阿冬专栏
- 中缀表达式转换为后缀表达式
- 中缀后缀表达式转换与计算
- 4.从中缀向后缀转换表达式
- 前缀、中缀、后缀表达式转换
- 中缀表达式转换为后缀表达式,计算后缀表达式
- [栈和队列]从中缀向后缀转换表达式
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法【转】
- 栈应用之将中缀数值表达式转换成后缀表达式
- 一天一个算法: 前缀,中缀,后缀表达式的转换
- 中缀表达式到后缀表达式的转换
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
- 栈的应用:中缀和后缀表达式的转换及计算
- 栈的应用 平衡符号 后缀表达式 中缀到后缀的转换