数据结构与算法——深入理解红-黑树!

红-黑树是一种自平衡二叉搜索树,通过遵循特定的红-黑规则来确保高效搜索。插入新节点时,可能需要进行颜色变换和旋转操作以保持树的平衡。默认插入红色节点,因为这样可以减少违反红-黑规则的概率。插入过程中,可能会遇到三节点颜色变换、单节点颜色改变和旋转等调整,以修复违规并保持树的平衡。
摘要由CSDN通过智能技术生成

数据结构与算法——红-黑树

1 为什么需要红-黑树?

普通二叉搜索树,插入新节点后可能导致树的不平衡。
而平衡的二叉树,才能使搜索效率最高。
红-黑树在插入和删除的时候进行了一些特殊的处理,能使二叉树保持平衡。


2 红-黑规则

红-黑树在插入(删除)一个节点时,只有遵循红-黑规则,树才能始终保持平衡。
即 遵循红-黑规则<=>平衡树,把平衡树的问题转变为让树遵循红-黑规则的问题。
① 每一个节点不是红色的就是黑色的。
② 根总是黑色的。
③ 如果节点是红色的,则它的子节点必须是黑色的(反之倒不一定必须为真)。
④ 从根到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即黑色高度相同)。


3 为什么默认插入红色节点?

  • 若默认插入红色节点
    • 若父节点是黑节点——>不违反红-黑规则
    • 若父节点是红节点——>违法红-黑规则③
  • 若默认插入黑色节点
    • 无论父节点是黑或红——>一定违反红-黑规则④

综上,默认插入红色节点违规率50%,默认插入黑色节点违规率100%,所以默认插入红色节点好。


4 如何修正违规?

(1) [三节点]颜色变换
  • 触发:在插入过程中遇到一个黑色节点,并且它还有两个红色子节点,则需要三节点颜色变换。
  • 目的:在不违反红-黑规则④的前提下,一是使连接红色节点更方便,二是保证在进行一次或两次旋转操作后整个树仍是正确的红-黑树,三是保证了插入时若父节点(P节点)是红色节点则不可能有兄弟节点(不可能有一个红色兄弟节点,因为有颜色变换;不可能有一个黑色兄弟节点,因为违背红-黑规则④)。
  • 缺点:若祖父节点为红色节点,则会违反红-黑规则③。
  • 情况
    • 情况1:该黑色节点是根节点。
    • 情况2:该黑色节点不是根节点。
      在这里插入图片描述
(2) 单节点颜色改变
  • 触发:当父节点和子节点都是红色节点时(红红冲突),由于违背了红-黑规则③,需要改变单个节点的颜色。(单节点颜色变换和旋转是同时出现的,也即旋转触发的情况)
  • 目的:单节点颜色改变和旋转一起修正父节点和子节点都是红色的违规问题,广义的旋转包括“单节点颜色改变”和“旋转”。
  • 情况
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值