图解红黑树之2-3查找树

本文介绍了2-3查找树作为红黑树的基础,讲解了2-3查找树的插入原理以及如何处理溢出情况。接着引入红黑树,阐述其五个基本原则,特别讨论了插入时的“红红”冲突和删除时的“双黑”冲突,为后续的红黑树插入和删除操作奠定了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树结构


树结构有下面的几个缺点

  • 空间:占空间较多相对于线性结构
  • 创建:构造起来比较麻烦
  • 维护:对于平衡树,结构修改(增、删)后又需要平衡

那么,既然这样为什么还要用树结构呢。原因很简单,它的插入和删除操作所使用的时间非常短。红黑树可以在O(log n)的时间内做查找、插入和删除操作

2-3查找树


直接接受“红黑树”还是有些难以下咽的,红黑树跟2-3查找树有着千丝万缕的联系,因此这里从简单轻松的2-3查找树开始介绍。
2-3查找树也是一种平衡排序树,2代表一个节点最多有两个值,3代表各节点最多有3个子节点。

2、3-节点

当插入的时候,被插入的位置节点数为1,直接插入;被插入的节点数为2,直接插入变成3节点,这种情况况叫做溢出,选择溢出节点的中位数,上浮到父节点中,父节点如果也溢出,继续溢出处理;当root节点溢出的时候,把中位数构造成新的root,另外两个节点变成它的子节点,这时Tree.height加1,这也是Tree.height唯一变化的方式。

插入

新插入的节点为N

因为2-3查找树不是介绍的重点,因此就暂时介绍到这里。

2-3查找树是B树的一种情况,B树的具体内容,请参看《算法导论》

红黑树


红黑树也是平衡二叉树的一种,把2-3查找树中的2-节点分割为两个节点,节点之间用红树干链接,这样就组成了红黑树。

这里写图片描述

五个原则:

  1. 节点是红色或黑色。

  2. 根是黑色。

  3. 所有叶子都是黑色(叶子是NIL节点)。

  4. 每个红色节点必须有两个黑色的子节点。(不能有两个连续的红色节点。)

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

五个原则简单而优雅,这是“大咖”们历经千辛万苦凝结成的精华,需要认真的思考才能知道其中的缘由。因此不妨停在这里,深深的思考一下,因为有些东西别人是教不会的,需要自己领悟。

“双红”冲突

插入的时候,新插入的节点为N和父节点均为红色,这叫做“红红”冲突(违反了原则4)。倘若允许它的存在,那么这棵树就可以全是红树,就没有平衡可言了。

“双黑”冲突

删除的时候,删除的节点N本身为黑色,那么删除以后,这个分支的黑色节点总数目会变小,倘若N的子节点可以当做两个黑节点看待,换句话说:删除了N以后,它的两个子节点就要“黑色担当”,只有这样这棵树才是平衡的。这样的子节点就是“双黑”节点。消除了这种“双黑”冲突,删除才算完成。

这篇就到这里,请看下一篇:《图解红黑树之插入与删除》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值