二叉树中缀表达式到后缀表达式的转换

规则:

当读到一个操作数时,立即把它放到输出中。当读到操作符时不立即输出,从而必须先存在某个地方。正确的做法是将已经见到过的操作符放进栈中而不是放到输出中。当遇到左括号时我们也要将其推入栈中。如果遇到一个右括号,我们就弹出栈中的符号并输出,直到遇到对应的左括号,并且这个左括号只弹出,不输出。

存入栈中的操作符的规则:优先级必须保持从上到下为高到低。遇到一个操作符时,我们从栈中弹出元素,直到发现有比遇到的操作符优先级更低的元素为止。例如:如果我们遇到一个*,而栈中此时的元素为 +,那我们就可以把存入栈中,但是如果我们遇到的是+,而此时栈中的顶元素为* +,优先级大于+,那我们就先把* +弹出并输出,再把+存入栈中。

注意:能处理左括号的只有右括号

 

例:

我们把

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 * +

暂存栈:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值