深入理解红黑树

 我来答
濒危物种1718
2022-07-16 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6571
采纳率:100%
帮助的人:45.9万
展开全部

10 亿 数据量级, 只需 30 多次就能够 查到目标

O(h = log2 n)

没有1条路径 比 其他路径 长到 2 倍

2. 指针 NIL & 哨兵结点 T.nil

哨兵结点 / 叶结点 / 外部结点

黑高: 从 x 出发( 不含 x 和 叶 )

(2) 根 黑
(3) 叶(T.nil) 黑
(4) 红结点 2个子结点 均 黑 => 不能 连着 2 个 红

(5) 每个结点 到其 所有后代 叶结点 的 简单路径上, 黑结点个数相同

变色 / 旋转前后 黑色层数不变

把 高 和 黑高 联系起来

记住 左旋 思路

记住 4 点

z: 插入节点的指针, z 最终替换了某个 T.nil 的位置

记住 rb_transplant

1. 欲删结点 z

2. y 维持为

(1) z => y ( 最多 ) 只有 1 个 孩子 ( 左 or 右 )

(2) z 的后继 => y ( 最多 ) 只有 1 个 右孩子

3. y_original_color 记录 y 变色前 的颜色

y_original_color 为黑

破坏红黑性 -> 调整

4. x 指向 y 唯一孩子 或 T.nil

5. y 红 => y 被 删除 或 移动 时, 红黑性质不变

6. 归结为 2类 删除 / 移动

记住/理解 delete / transplant 图

若 y 为黑 (才需 恢复) -> 恢复红黑性质 的 func 入参: 删除后 的 x

1. y 黑色 下推 给 x , 原 红 或 黑 x 变为 红黑色 或 双重黑色

额外黑 是针对 x 的, 并不反映在 x 的 color上

2. 消除 额外黑

令 指针 x 表示 额外黑

额外黑/x 沿树上移 , until x == T.root

x.color = 红

while 外, x 涂 黑

while 内, 保持 指针 w 指向 x 的兄弟 . x 双黑 时 => w not T.nil

x 为右孩子时, 图对称画出

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式