B树 B+树和红黑树详解

1. 树

1.1 2-3树

​ 为了保证二叉查找树的平衡性,允许树中的一个节点保存多 个键。

1.1.1 2-3树的定义

一棵2-3查找树要么为空树,要么满足如下两个条件;

  • 2-节点:

    含有一个键和两条链,左链指向的2-3树中的键都小于该节点,右链指向的2-3树中的键都大于该节点

  • 3-节点:

    含有两个键和三条链,左链指向的2-3树中的键都小于该节点,中链指向的2-3树中的键都位于该节点的两个键之间,右链指向的2-3树中的键都大于该节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvXJeyTT-1627393422321)(resource/1618836192642.png)]

1.1.2 查找

​ 将二叉查找树的查找算法一般化,可以得到2-3查找树的查找算法。判断一个键是否在树中,先在根节点查找是否命中。若命中,则查找结束;若未命中,则根据比较结果找到对应的区间连接,并在连接指向的子树中继续执行查找算法(递归)。如果这个连接为NULL,则查找失败。

1.1.3 插入

1.1.3.1 向2-结点中插入新键

​ 先进行查找,后将键放到未找到的节点上。插入后仍然保证树的平衡状态。如果查找后未找到的节点是一个2-节点,则只需要将新的元素放到这个2-节点里面使其变成一个3-节点即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-95hEOcci-1627393422328)(resource/1619076501563.png)]

1.1.3.2 向一棵只含有一个3-结点的树插入新键

​ 假设2-3树中只含有一个3-节点,这个节点有两个键,没有空间来插入第三个键。则假设这个节点能存放三个元素,使其暂时成为一个4-节点。将这个4-节点中间的键进行提升,左边的键成为其左子树,右边的键成为其右子树。插入完成后,变回2-3树,树的高度从0到1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dfh28zG6-1627393422334)(resource/1619076916431.png)]

1.1.3.3 向一个父节点为2-结点的3-结点中插入新值

​ 先将节点插入3-节点,使其临时成为一个4-节点。把4-节点的中间元素提升到父节点(2-节点)中。把剩余的键分别挂到父节点恰当的位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spD9mQLh-1627393422343)(resource/1619077308948.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S3qZ6wzO-1627393422348)(resource/1619077329619.png)]

1.1.3.4 向一个父节点为3-结点的3-结点中插入新键

​ 当插入节点是一个3-节点的时候,将该节点进行拆分,中间元素提升到父节点。由于父节点也是一个3-节点,故父节点也进行拆分,将中间元素向上提升。直到遇到一个2-节点,将其变成一个3-节点后,插入完成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYAXO3hV-1627393422354)(resource/1619077711788.png)]

在这里插入图片描述

1.1.3.5 分解根节点

​ 当插入节点到根节点的路径上全部都是3-节点的时候,最终根节点会变成一个临时的4-节点。此时,需要将根节点拆分成两个2-节点,中间的键向上提升成为根节点(2-节点)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值