红黑树学习笔记

本文介绍了红黑树的基本概念和性质,包括每个节点的颜色属性、根节点和叶节点的颜色规定,以及红黑树的平衡条件。详细阐述了红黑树在插入新节点时的旋转操作,如右旋和左旋,以及如何通过旋转和颜色调整来维护红黑树的性质。此外,还提及了删除节点的情况,但未展开详细说明。
摘要由CSDN通过智能技术生成

什么是红黑树
红黑树是一棵二叉搜索树,它为每一个节点增加了一个属性——颜色,其值为黑色或红色,红黑树确保从根节点到叶节点的所有路径长度差距在2倍以内,以此保证自身是近似平衡的。
红黑树是满足下面5条性质的红黑树:

  • 每个节点或是黑色的,或是红色的。
  • 根节点是黑色的。
  • 每个叶节点(NIL)是黑色的
  • 如果一个节点是红色的,则它的两个子节点都是黑色的
  • 对于每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

常规二叉树
图1

红黑树
图2
二叉搜索树的旋转
左旋时右孩子不为NIL,右旋时左孩子不为NIL
在这里插入图片描述
如果是红黑树进行左旋和右旋,那么旋转后就可能会导致新的树的不满足红黑树的某些性质,所以红黑树旋转后需要进行调整以保持性质,下面的旋转是红黑树添加节点时保持性质的关键(左旋与之类似,就不画出来了):
在这里插入图片描述
这种旋转加颜色修改既修复了左边结构不满足性质4的问题,又不改变其它性质,二叉树添加节点后的修复往往都是往这个结构靠拢,然后再旋转。

红黑树添加节点
新节点只会添加到根节点或叶节点(这里指常规页节点)上,假设添加节点z,若添加到某个节点的左孩子上,则在循环里重复进行以下操作直到z的父节点为黑色:

  • 情况1:若z的叔叔节点为红色,则将其父亲节点和叔叔节点颜色标记为黑色,祖父节点标记为红色,让z = 祖父节点
  • 情况2:若z为右孩子,则以z的父亲为轴进行左旋
  • 情况3:若z为左孩子,将其父亲节点颜色标记为黑色,祖父节点颜色标记为红色,并以z的祖父为轴进行右旋。

红黑树删除节点
待续

总结
还是太菜了,看证明过程把自己绕晕了,只能大概把添加节点的流程给梳理出来了,这篇博客留待后续补充吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值