逆波兰表达式的树状解法

描述
    一个四则运算算术表达式,只包含“(”,“)”,“+”,“-”,“*”,“/”,括号可嵌套,利用有向无环图的邻接表达式存储,每个操作数原子都由一个小写字母表示。写一个算法输出其逆波兰表达式(又称后缀表达式)。
 
输入
输入长度不超过100的四则运算表达式,中间没有空格,以’#’结尾。
 
输出
输出表达式对应的逆波兰表达式
 
输入样例
(a+b)*c
 
输出样例
ab+c*

本题本来是用栈解的,但是作为一个表达式,显然树状更符合大家的逻辑认知,就是运算符是父节点,数据是左右孩子,于是想了很久想出了这种有向无环图(也就相当于树)的表达形式

基本思路如下:
先扫描整个字符串,给运算符赋一个优先级,基础优先级先设为0,从左往右扫,如果是加减的话其优先级就在基础优先级上1,乘除的话加2,左括号的话基础优先级加2,右括号的话基础优先级减2。
然后从右往左扫,以第一个优先级最低的运算符作为中点
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值