[算法导论笔记]--红黑树

一.什么是红黑树

红黑树是一棵二叉搜索树,其在每个结点上增加了一个存储位来表示颜色,可以是红(red)或者黑(black)。通过任何一条从"根到叶子的简单路径"上的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似于平衡的。红黑树是一种平衡二叉树。

红黑树的基本性质

(1)每个结点要么是红色的,要么是黑色的(废话..)

(2)根结点是黑色的

(3)叶子结点是黑色的(也可以说是NIL结点)

(4)如果一个结点是红色的,那么它的孩子一定是黑色!(也就是红色不可邻接)

(5)对于每个结点,从该结点到其所有后代的简单路径上,包含的黑色结点数目相同(即黑高相等)

其中,4、5两点是约束的关键。基本上,对于红黑树的更易操作,如增、删等,有可能破坏性质4、5,因而需要“修复”。

为了处理红黑树中代码的边界条件,使用一个哨兵NIL。对于一棵红黑树T,哨兵T.nil是一个与树中普通结点拥有相同属性的对象,它的颜色为。而其他属性为任意值。

 

二.红黑树的插入操作

我们规定,每当插入一个新的结点,都先将这个结点“涂”成红色。在确立了这条规则后,就可以讨论插入操作所引发的影响了。

在插入之前,红黑树已经满足了5条基本性质。现在考虑插入结点z的父结点z.p的颜色。

如果z.p是黑色的,因为插入的结点是红色,自然任何到达z.p的支路,所对应的黑高不变,故满足性质5.同时,红色结点的父亲是黑色,也满足性质4.所以,红黑树的基本性质依然满足,不需要再进行多余的操作了(插入就插入吧)

如果z.p是红色的,阿哦,很显然,这立刻就打破了性质4的约束。很显然,我们需要进行适当的“操作”来维持红黑树的性质。至于该如何操作,又要分三种情况来讨论:

1、

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值