当年飞哥准备软考,弄了一个视频,一开始就给我讲“树”,让我那个懵逼哟……不明觉厉!
不像?倒过来看!
关键的关键,是和树一样有分叉。
节点(node)
叉:二叉/三叉/n叉……。为了教学方便,一般都使用二叉树:一个节点最大只有两个“分叉”
关系:父/子/兄弟/祖先/后代
深度:从根到叶子的层级数
子树:一个树有可以被分为多个子树
树可以认为是一种链表,他们都是通过“指针”进行组织
为什么需要树?@想一想@:为什么需要文件夹?
磁盘上有成千上万个文件,如何才能快速的找到其中某一个文件?(地址同理)
树的最大作用是便于查找。
特点/定义:
@想一想@:为什么需要“排序”二叉树?便于查找。(演示)
在排序二叉树的基础上增加“平衡”:
任何一个子树,左右两边叶子节点的深度差距不大于1
为什么需要平衡?将算法时间复杂度始终控制在O(log(n))
有些同学会瞬间联想到:这不就是二分查找么?为什么不直接顺序排列,然后用二分?
问题是:用什么装数据?尤其是当数据插入/更改/删除的时候:
#体会#:数据结构是算法的基础,一定是先有数据结构,然后才有算法……
这里的树,专指排序平衡二叉树。
如何实现?常规方法是:在排序二叉树的基础上进行平衡调整。
第一个节点为根节点。
第二个节点和第一个节点比较:
第三个节点,以此类推
PPT演示……
每一次排序完成,检查是否平衡。如果没有,利用左旋转/右旋转 及其 组合进行调整。
更复杂树仍然使用这个套路,先调整不平衡子树,再依次往上调整直到根节点,总之:
如果把树搞得再“乱”一点,就可以形成
其实也有点像(互联)“网”:
图的应用以前还很神秘,现在烂大街了。@想一想@:百度/高德地图、滴滴打车,是不是都要用到图?
我们所学的算法其实都是皮毛,^_^
有兴趣的同学可以继续学习:
但因为在实际的(企业级应用)开发中用不到,我们就不多讲了……
好吧,我承认,我也不会,ʅ(‾◡◝)ʃ
多快好省!前端后端,线上线下,名师精讲
更多了解 加: