二叉树、B树、B+树、红黑树 的 本质区别以及各个应用场景

8 篇文章 2 订阅

我们先来看一个场景,然后再看下面的定义,以便深刻理解和记忆

https://blog.csdn.net/qq_29373285/article/details/88610654

二叉树

特点:每个节点最多有两个子节点
在这里插入图片描述
完全二叉树:高度为k的二叉树,其1~h-1层为满结点,且其h层(叶子结点层)的节点从左至右依次排列(最多2^h-1个,最少0个)
在这里插入图片描述
满二叉树:除最后一层外,每个结点都有左右子结点的二叉树
在这里插入图片描述
平衡二叉树:任一结点的左右子树的高度差绝对值不超过1,且左右子树均为平衡二叉树(防止树退化成链表)
在这里插入图片描述

B树

**B树和二叉树的区别:**二叉树最多能有两个子节点;B树最多只能有M个子节点,最少有三个子节点

查找
多路查找

  1. 从根节点开始,若key=k[i],查找成功,否则根据值范围去对应子树查找

插入

以关键字序列{1,2,6,7,11,4,8,13,10,5}为例,构建5阶B树,则一个结点最多关键字4个

1.1,2,6,7组成根节点
在这里插入图片描述
2.插入11,超出4个关键字,以中心关键字6进行拆分
在这里插入图片描述
3.插入4,8,13后
在这里插入图片描述
4.再插入10,以关键字10进行拆分
在这里插入图片描述
删除

需要先找到待删除的关键字,删除中若结点关键字不满足要求,则重新分配关键字

这是可能需要向其兄弟结点借关键字或者和其孩子结点进行关键字的交换,也可能需要进行结点的合并,其中,和当前结点的孩子进行关键字交换的操作可以保证删除操作总是发生在终端结点上

B+树

**介绍:**B+树是B树的升级版本,就目前情况,绝大部分都已经用B+树代替了B树了,文件管理、索引等等,当然,具体为什么可以看下面的优点介绍

**区别:**B+树非叶子节点不存储数据,每个叶子节点指向相邻的叶子节点
在这里插入图片描述
查找插入删除与B树类似

但 B+树提供了旋转功能,来尽可能的减少页的拆分

旋转发生在leaf Page已经满了、但是其左右兄弟节点没有满的情况下

B树与B+树的比较

1.B树中关键字集合分布在整棵树中,叶节点中不包含任何关键字信息,而B+树关键字集合分布在叶子结点中,非叶节点只是叶子结点中关键字的索引;

2.B树中任何一个关键字只出现在一个结点中,而B+树中的关键字必须出现在叶节点中,也可能在非叶结点中重复出现;

红黑树

本质:自平衡二叉树

在二叉查找树基础上,添加以下性质

  1. 节点是红色或黑色

  2. 根节点是黑色

  3. 每个为空的叶子节点是黑色的

  4. 每个红色节点的两个子节点都是黑色

  5. 从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点

时间复杂度为O(lgn)
在这里插入图片描述
插入

  1. 将红黑树当做一颗二叉查找树插入 2. 将插入的节点着色为“红色”(基于性质5) 3. 通过一系列旋转或重新着色等操作,使之重新成为一颗红黑树(不会违背性质1,2,3只需考虑性质4) 4. 进行情况判断,修正红黑树

删除

和二叉树差不多

优点

  1. 红黑树的插入删除效率更高,任何不平衡都会在三次旋转内解决 2. 二叉平衡树比红黑树更为平衡,因此插入或删除时变动频次更高,但查找效率也更高

如何判断一个树是否有环

1.遍历结点,标识是否遍历过

2.记录每个结点到终点的坐标

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的小蜗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值