平衡二叉树、B树、B+树、红黑树解析

目录

有序二叉树

  • 关于有序二叉树的详解以及 J a v a Java Java代码实现详见:二叉排序树详解并通过Java代码实现。
  • 每个节点最多有两个孩子节点。
  • 任一节点的值大于其左孩子的值,小于其右孩子的值。
  • 有序二叉树在查找和排序方面具有比较好的性能。
  • 有序二叉树性能不稳定,查找的复杂度介于 O ( l o g n ) − O ( n ) O(logn) - O(n) O(logn)−O(n) 之间。

平衡二叉树

  • 对于构造有序二叉树时出现的一些特殊的情况,例如每个节点的值都比上一个插入的值要大,那么构造出来的二叉树就会像一个链表一样向一边不断延伸。这种情况下我们对数据进行查找的复杂度就又会变成 O ( n ) O(n) O(n)。
  • 为了使有序二叉树稳定,我们引入平衡二叉树 ,平衡二叉树在有序二叉树的基础之上,左右子树的高度差不会超过 1 1 1。这样就确保了在进行数据查找是接近 O ( l o g n ) O(logn) O(logn) 的复杂度。
  • 数据在插入的过程中是无序的,为了解决这一问题,我们引入了四种算法:RRLLRLLR。通过节点的旋转来使二叉树平衡。

构造平衡二叉树

RR

LL

RL

LR

平衡二叉树的优缺点:

  • 优点:左右孩子节点平衡,查找消耗的时间复杂度无限接近 O ( l o g n ) O(logn) O(logn)。
  • 缺点:过于复杂,构建过程会消耗计算机的性能。

2-3-4树

  • 2-3-4树中存在着3种类型的节点:
节点名称 特征
2节点 存放一个数据,分出两个叉
3节点 存放两个数据,分出三个叉
4节点 存放三个数据,分出四个叉
  • 2-3-4树的构造过程中,优先生成小节点,节点值多了存不下,就把中间的往上面挤,如果中间存放了两个数据,就把靠后的那个数据往上挤生成一个新的节点。

红黑树

  • 红黑树由2-3-4 树转换而来,2节点转化为黑色节点,3节点转化为一个黑色节点下挂一个红色节点,4节点转化为一个黑色节点下挂两个红色节点。
  • 红黑树的特点:
  1. 每个节点不是红色就是黑色。
  2. 根节点一定是黑色。
  3. 如果一个节点是红色,那个它的子节点一定是黑色。
  4. 从根节点到任意叶子节点上黑色节点数目是相同的。
  5. 最长路径(红黑交替)最多是最短路径(全黑)的两倍。
  • 因此红黑树的性能介于排序二叉树和平衡二叉树之间,时间复杂度是可以接受的。

B树

  • 几阶B树就表示每个节点分出几个叉。例如: M M M阶B树最多分出 M M M个叉,每个节点最多存放 M − 1 M-1 M−1个数据。
节点名称 特征
2节点 存放一个 k e y key key和 v a l u e value value,分出两个叉
3节点 存放两个 k e y key key和 v a l u e value value,分出三个叉
4节点 存放三个 k e y key key和 v a l u e value value,分出四个叉
5节点 存放四个 k e y key key和 v a l u e value value,分出五个叉
  • 五阶B树构建示意图:

B+树

  • B+树的非叶子节点仅具有索引作用,也就是说,非叶子节点只能存放 k e y key key 值,不存放 v a l u e value value 值,所有的 v a l u e value value 值都在叶子节点。
  • 这样的存储方式能确保一页存储更多的数据,整个树的高度会更低。
  • B+树的叶子节点构成一个有序链表,因此对整棵树的遍历只需要遍历叶子节点即可。
  • 四阶B+树构建示意图:

B树、B+树、红黑树的应用

应用 备注
B树 磁盘中的数据存储 因为磁盘文件较多,如果用红黑树是二叉树,会导致树高度偏高,查找性能会比较差。
红黑树 应用于内存的数据存储 红黑树的查找性能接近于 O ( l o g n ) O(logn) O(logn),内存中的文件并不多,但对性能的要求较高。
B+树 一般用于数据库中数据存储 因为叶子节点之间有连接,方便进行范围查找。( k e y key key 值表示主键, v a l u e value value 值表示存储数据的地址)
相关推荐
KingDol_MIni16 分钟前
Spring Boot 集成 T-io 实现客户端服务器通信
java·服务器·spring boot
许苑向上20 分钟前
Java八股文(下)
java·开发语言
逸Y 仙X25 分钟前
Git常见命令--助力开发
java·大数据·git·java-ee·github·idea
独孤求败Ace28 分钟前
第44天:Web开发-JavaEE应用&反射机制&类加载器&利用链&成员变量&构造方法&抽象方法
java·开发语言
FLZJ_KL29 分钟前
【设计模式】【创建型模式】单例模式(Singleton)
java·单例模式·设计模式
CL_IN36 分钟前
企业数据集成:实现高效调拨出库自动化
java·前端·自动化
计算机-秋大田41 分钟前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
计算机毕设指导61 小时前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
华子w9089258591 小时前
基于数据可视化+SpringBoot+安卓端的数字化施工项目计划与管理平台设计和实现
java·spring boot·后端
橘猫云计算机设计1 小时前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django