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