为什么需要树这种数据结构?
举例说明(树的查找很快,而且添加和删除也很灵活)
二叉树的概念
完全二叉树的理解参考:https://blog.youkuaiyun.com/maqingbin8888/article/details/81984187
二叉树的前序、中序和后序遍历
不管是哪种形式的遍历,都肯定是从根节点开始的。过程有些类似递归回溯的思想。
前序、中序和后序查找
过程其实就和遍历差不多,只不过是在遍历的时候要做个比较,而且,一旦找到就结束遍历。代码略。
二叉树删除节点
删除的简化版思路
顺序存储二叉树
说得通俗一些,顺序存储二叉树就是使用数组来实现一个完全二叉树。
几个简单的例子:
在八大排序算法中的堆排序就会使用到顺序存储二叉树。
线索化二叉树
赫夫曼树
注意,必须是叶子节点的权值。
示例:
非叶子结点上的值都是临时的中间值,再建成赫夫曼树之后这些值就没什么用了:
赫夫曼树的主要应用之一就是赫夫曼编码,详情见视频:https://www.bilibili.com/video/av54029771?p=116
参考代码:https://blog.youkuaiyun.com/kimylrong/article/details/17022319
二叉排序树
二叉排序树的查找效率很高,而且又不会影响到删除和插入的效率。
代码参考:https://blog.youkuaiyun.com/seagal890/article/details/79772239。注:这篇参考文章中插入节点53后不必再看。
平衡二叉树
平衡二叉树是对排序二叉树的改进,它的前提仍然是一个排序二叉树。
如果一棵树不是平衡二叉树,如果把它转成平衡二叉树呢?
如果是右边高,则需要左旋转:
如果左边高,则需要右旋转:
有时一次旋转仍然不能使其变成平衡二叉树,需要进行两次旋转,即双旋,那什么时候需要双旋呢?
同理,在符合左旋转的条件时,反过来分析即可。
详细参考:https://www.cnblogs.com/qm-article/p/9349681.html
红黑树参考:https://segmentfault.com/a/1190000012728513
多叉树
多叉树之2-3树
B树和B+树
B树实现参考:https://blog.youkuaiyun.com/u012124438/article/details/78109466
B+树是将数据进行分类查找,创建数据所在的索引,类似于图书馆的书放在哪个厅哪个区哪个柜子哪一层……