数据结构——树

为什么需要树这种数据结构?

举例说明(树的查找很快,而且添加和删除也很灵活)

二叉树的概念

完全二叉树的理解参考:https://blog.youkuaiyun.com/maqingbin8888/article/details/81984187

二叉树的前序、中序和后序遍历

不管是哪种形式的遍历,都肯定是从根节点开始的。过程有些类似递归回溯的思想。

实现参考:https://blog.youkuaiyun.com/coder__666/article/details/80349039?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

前序、中序和后序查找

过程其实就和遍历差不多,只不过是在遍历的时候要做个比较,而且,一旦找到就结束遍历。代码略。

二叉树删除节点

删除的简化版思路

更详细代码参考:https://blog.youkuaiyun.com/isea533/article/details/80345507?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

顺序存储二叉树

说得通俗一些,顺序存储二叉树就是使用数组来实现一个完全二叉树。

几个简单的例子:

在八大排序算法中的堆排序就会使用到顺序存储二叉树。

线索化二叉树

代码实现参考:https://blog.youkuaiyun.com/My_heart_/article/details/52086321?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

赫夫曼树

注意,必须是叶子节点的权值。

示例:

非叶子结点上的值都是临时的中间值,再建成赫夫曼树之后这些值就没什么用了:

赫夫曼树的主要应用之一就是赫夫曼编码,详情见视频: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+树是将数据进行分类查找,创建数据所在的索引,类似于图书馆的书放在哪个厅哪个区哪个柜子哪一层……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值