数据结构之重要树总结(红黑树、B/B+树等)
来源:互联网 发布:手机自动开票软件 编辑:程序博客网 时间:2024/05/14 09:46
众所周知,二叉树在数据结构中的分量举足轻重。之所以分量如此重,是因为在实际中有很多情况用此数据结构会产生很多好处。本文主要对二叉搜索树、平衡二叉树、红黑树、B(B+、B*)树进行总结,因为这几种树的概念十分重要,了解它们对于其他学科的知识将会有更进一步的理解。
树结构优劣最重要的衡量标准就是操作的时间复杂度,而这些操作的时间复杂度与树的高度成正比。
首先看一张图
图1 多种树的关系概略图
这张图概略地描绘了这些树的关系,I、II、III、IV、V均表示两种树之间的关系。以下我会一点一点地讲述为什么会出现这些树。
首先是树和二叉树,这个概念很简单也很基础,在此不再赘述,只提一点:二叉树不是树的一种特殊情况。原因百度百科有,我亦不表,因为我觉得这个概念并不重要,不管是不是一种数据结构,二叉树始终是从树中衍生出的。
从这里开始进入本文主要内容。
接下来介绍二叉搜索树。二叉搜索树又称二叉排序树、二叉查找树。
一、为什么会出现二叉搜索树?
对于数据的操作来说,最主要的无非就是查找、插入和删除。
假设我们有一个数据集,它是顺序存储(包括线性表和链表两种方式)的,那么插入和删除操作对于这种结构来说,效率是可以接受的,但 是查找效率呢?一旦数据集中数据无序将使查找效率很低。那自然我们就想到让数据集有序,好,请继续看......
如果数据集是有序的也是顺序存储的,查找我们就可以采取二分法等来实现,效率确实很提高很多,但 是,也正是因为有序,在插入和删 除操作上就需要耗费大量时间。这就迫使我们寻找能兼顾查找、插入和删除操作效率的方法,于是二叉搜索树登场了。
二、二叉搜索树与二叉树的关系(这里也就是图1中关系I)
图1中关系I表示二叉搜索树是在二叉树的基础上定义的,只不过附加了以下条件(二叉搜索树不为空时):
对于任意结点
1、若其左子树不空,左子树上所有结点的值均不大于此结点的值;
2、若其右子树不空,右子树上所有结点的值均不小于此结点的值;
3、其左右子树也分别为二叉搜索树。
三、二叉搜索树性能
最好的时候是完全二叉树,时间复杂度是O(log2n);最差的时候线性连接的情况,时间复杂度O(n)。
四、二叉搜索树操作(操作代码此文不表,以下所有同)
一、为什么需要平衡二叉树?
二、平衡二叉树与二叉搜索树的关系(这里也就是图1中关系III)
三、平衡二叉树的性能
四、平衡二叉树的操作
一、红黑树与二叉搜索树的关系(这里也就是图1中关系II)
二、红黑树与平衡二叉树的关系(这里也就是图1中关系IV)
以下是我觉得很不错的几篇博客
http://blog.csdn.net/v_JULY_v/article/details/6530142
http://blog.csdn.net/eric491179912/article/details/6179908
- 数据结构之重要树总结(红黑树、B/B+树等)
- 数据结构之B树
- 数据结构之B-树
- 数据结构之B树B+树
- 浅谈数据结构中的树(B/B+/B-/B*)
- B 、B-、B+树总结
- 【重要】B树 B-树 B+树 B*树
- 数据结构大总结系列之B树和R树
- 数据结构大总结系列之B树和R树
- 【数据结构】B树(B-Tree)
- 数据结构--B 树、B+ 树、B* 树
- 数据结构:B树&B+树&B*树
- 【数据结构】B树/B+树
- 【数据结构】二叉排序树,AVL树,B,B+树总结
- 数据结构中的树(红黑树,平衡二叉树,B树,B+树,B*树)
- 【数据结构重温】B树、B-树、B+树、B*树
- 数据结构(四)--B树、B-树、B+树、B*树
- 【数据结构之二叉树】(一)B树、B-树、B+树、B*树介绍,和B+树更适合做文件索引的原因
- MAT查找内存泄露
- 盛大的珩隆国际崇宁重宝展览
- svn无法读取日志问题解决
- poj 2002
- 在python中扩展c语言模块
- 数据结构之重要树总结(红黑树、B/B+树等)
- 由珩隆国际举办的第四届崇宁重宝博览会再次成为市场热点
- UVA387
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 深入理解C++面向对象机制(零)单继承
- 函数指针传参问题
- 在fedora下面安装ftp服务器
- 当今世界依然屏蔽谷歌服务的五个国家
- 单一入口