【数据结构】三大“神树”——AVL树,红黑树,B树

这篇文章是对当前我学过的三大搜索树的总结,不包含具体实现代码,但对想理清各个数据结构的优劣,实现细节与应用场景的人应该有所帮助。

目录

一、AVL树

AVL树的简介:

AVL树的优势与劣势:

AVL树的实现细节:

1.如何确定平衡

2.如何调整

AVL树的应用:

二、红黑树

红黑树的简介:

红黑树的优势与劣势:

红黑树的实现细节:

1.红黑树的平衡规则

2.如何插入节点

红黑树的应用:

三、B树

B树的简介:

B树的优势与劣势:

B树的实现细节:

1.插入时破坏平衡,分裂节点

2.删除时破坏平衡,借元素,合并与旋转

B树的应用:


一、AVL树

AVL树的简介:

AVL树,又称平衡二叉搜索树,如其名字所示,这是一棵左右两棵子树高度差不超过1,且左右子树都是一棵平衡二叉搜索树的树。这棵树最大的特点就是其自平衡的特性,在有数据变动后通过算法分析调整各个元素的位置,使查找效率始终保持在一个高的状态。

AVL树的优势与劣势:

其使用平衡因子差值来判断树是否平衡的方法是一种非常严格的检查机制,加上检查到树不平衡后复杂的元素调整机制,能极大的保证其查找的效率。但是,这样严格的平衡检查与调整机制在另一方面也降低了这棵树的插入与删除效率。另外,不得不提的是,我曾在还是一名数据结构与算法小白的时候,挑战手写一棵AVL树,这过程可谓是折磨至极,所以,可以看出AVL树的另一个缺点——代码实现难度较高。

AVL树的实现细节:

1.如何确定平衡

在插入或删除节点后,将调用检查平衡的代码,代码将从插入出向上回溯,检查每一个节点的左右子树的高度是否超过限定值。

2.如何调整

根据破坏平衡的节点(N1)相对于发现不平衡处节点(N0)的位置决定调整策略,共有LL右旋类型(N1在N0左子树的左边),LR左右旋类型(N1在N0左子树的右边),RR左旋类型(N1在N0右子树的右边),RL右左旋类型(N1在N0右子树的左边)。

AVL树的应用:

AVL树的特点决定了其最适合增删操作低频,查找操作高频的场景。

具体应用场景有Windows NT内核。

值得一提的是,因为在实际中的数据操作中重新调整使树平衡的代价往往比较高,所以AVL树没有很多应用场景。

二、红黑树

红黑树的简介:

红黑树也是一种二叉查找树,如名字所示,红黑树对每个节点引入了额外的数据域来表示当前节点的颜色(红或黑),通过对每条路径上的节点着色的限制,来确保没有一条路径比其他路径长两倍。

红黑树的优势与劣势:

红黑树的平衡判断和调整机制相比于AVL树更加简单,这使得在元素插入和删除的效率有所提升,其相对平衡的特性也在一定程度上保证了查找效率。作为一棵二叉查找树,它保持了相对平均的能力。当然,因为红黑树对于平衡的要求相对宽松,它的查找效率没有AVL树那么高。

红黑树的实现细节:

1.红黑树的平衡规则

根节点是黑色,叶子结点都是黑色,每个红色结点的子结点一定都是黑色,任意一个结点到每个叶子结点的路径包含数量相同的黑色结点。

2.如何插入节点

插入节点时,设置插入节点为红色。

如果插入节点的父节点是黑色,则不会破坏平衡。

如果插入节点的父节点是红色,则需要像AVL树一样根据各个节点的相对关系来确定调整策略。(调整策略包括左旋,右旋,改变颜色)。

红黑树的应用:

因为红黑树有均衡的能力,其应用范围很广。

具体应用场景有:

C++(STL等)和Java(TreeSet,TreeMap等)的各类数据结构相关库中,Linux中的进程调度程序等。

三、B树

B树的简介:

B树,不同于AVL树和红黑树,是一种多路搜索树。与其他搜索树相同的是其也通过一系列规则维持平衡。

B树的优势与劣势:

B树是一种专门为硬盘IO所设计的数据结构,因为磁盘IO效率远低于内存IO效率,所以相比于查询效率很高的传统的系列二叉搜索树,在数据量大到需要在磁盘进行存储时,B树具有查找区间多,能有效减少IO次数的优势。劣势便是在于由于一个节点可以有多个子节点的特点,B树单次查询效率小于传统的平衡二叉查找树。

B树的实现细节:

1.插入时破坏平衡,分裂节点

找到当前节点的中间位置,将中间位置右边数据给兄弟节点,将中间位置数据给父节点。

如果父节点不存在,则创建父节点插入。

如果父节点存在,则正常插入,判断父节点否B树性质是否被破坏。如果破坏,则重复父节点分裂操作。

2.删除时破坏平衡,借元素,合并与旋转

兄弟节点有足够的元素时,借兄弟的一个元素后旋转。(找右兄弟借最左边的后左旋,找左兄弟借最右边的后右旋)

兄弟节点没有足够的元素时,把父节点和被删除元素的节点向另一个兄弟节点合并。

注意:使用代码实现B树时,可以提前写好对每个节点中的元素进行操作的方法,在进行复杂的插入与删除操作的代码编写时可以事半功倍。

B树的应用:

正如前面的简介中所说,B树这种数据结构主要应用在SQL数据库和磁盘IO相关程序中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值