二叉树解决四则运算的研究

背景:

  读大学那会上了计算机结构及算法,工作了几年,里面的内容在实际开发中很少运用,可能是自己所在的行业限制,让很多大学的知识还没有发挥的空间,感觉现在主要的就是实现业务逻辑,初中知识足够了,简单的逻辑。最近拿起书本又捡起了数据结构和算法,结合jdk的源码,感慨颇深,感觉自己这几年技术积累太少,或者说只注重了广度,深度上远远不够,这对自己以后的职业生涯是大大不利的。
  行,回到正题,大学那会学了树形结构,最长用的就是二叉树。其实这几年在项目中也有运用,就是存在这种父子机构的数据就直接可以存成树形结构,这样再设计一张表存储节点信息,当然也是通过主外键来实现每条记录之间父子关系。不过树里面的先序遍历,中序遍历和后序遍历基本上就没用过。最近遇到一个问题就很有意思,就是计算四则表达式。
  例如如果要用计算机来计算:(1+3)*12-3,这不是小学计算题吗?计算机来算不是小case吗?我开始也是这么想的,可真写起来代码来难度就大了,后来仔细思考下,觉得我们直觉上简单的,用计算机不一定简单,数学上能简单解决的,或许用代码来实现就没那么容易。
 现在来思考计算机最容易实现什么,就是你告诉他两个数,然后再告诉它需要执行什么运算,他就可以很快算出来,而算数表达式是通过括号﹑运算优先级﹑书写顺序来进行运算的。
 所以现在为了解决书写的计算式到计算机能理解的运算式的转换,需要借助二叉树结构。

探究:

基本的树的结构就这样:

父节点
左儿子
右儿子

考虑如果将父节点存成运算符,两个子节点存成数据,这样让计算机先读取两个子节点数据,再读取父节点运算符就可以执行运算了。

+
1
3

那对于复杂一点的算式呢?
如:2*3+1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值