二叉搜索树之红黑树

红黑树

只有红色和黑色节点、弱平衡的二叉查找树

红黑树的性质

  1. 根节点必须是黑色
  2. 如果当前节点是红色,其子节点必然是黑色,父子不能同为红色
  3. 叶子节点均是黑色
  4. 每条路径上的黑色节点的数量必须是一致的

PS:红黑树为什么是一颗弱平衡二叉树?
答:不能保证左子树和右子树高度差不会超过1。

红黑树的插入

问题一:插入节点颜色是默认值是红色?
答:插入节点后可能会导致树的不平衡,而且修复的代价很小,修复的方法是(调色和旋转)。

左旋转:
在这里插入图片描述
右旋转:

PS:其中虚线圆是指旋转后的节点,实心圆是当前位置,黑色箭头表示旋转后的位置

红黑树的插入

按照二叉搜索树的插入方法插入

当前节点的父节点为空,将颜色置为黑色,结束。

当前节点的父节点颜色是黑色,结束

当前节点的父节点颜色是红色,看叔叔节点的颜色

叔叔节点的颜色是红色

在这里插入图片描述
Step1:首先将父节点置为黑色
Step2:将叔叔节点染红,将祖父节点染红,然后继续检查祖父节点
Step3:重复检测

叔叔节点的颜色是黑色

在这里插入图片描述

三角型

举个例子:当前节点是父节点的右节点,当前节点的父节点是祖父节点的左节点(父节点左旋变成直线型),如上图所示

直线型

在这里插入图片描述
举个例子:当前节点是父节点的右节点,当前节点的父节点是祖父节点的右节点,如上图所示:(祖父节点进行右旋,交换祖父节点的颜色和叔叔的颜色)

举个例子:

Step1: 准备一颗红黑树

在这里插入图片描述
Step2: 插入一个节点 39,纠错,图中39应该是红色节点
在这里插入图片描述
Step3:左旋转节点38
在这里插入图片描述
Step4: 右旋转祖父节点40,并且交换当前节点和祖父节点的颜色,读取新的父亲节点和祖父节点继续检查。
在这里插入图片描述

红黑树的删除

搜索删除节点

查找替换节点

删除节点操作

删除节点有两个后代

交换替换节点和删除节点的值,对替换节点进行删除操作

删除节点无后代

1、删除节点是树根,直接删除或者替换
2、删除节点是叶节点,替换节点是NULL,
若删除节点是黑色,修复双黑

删除节点有一个后代

1、不是双黑节点,染黑替换节点即可

PS:双黑节点:替换节点和删除节点都是黑色

修改双黑问题
  1. 若删除节点不存在兄弟节点,需要将双黑问题传递给父亲节点,对父亲节点修复双黑问题
    在这里插入图片描述
  2. 兄弟节点是红色,对父节点进行左旋,然后染红父亲节点,染黑兄弟节点,纠错图中sibling的位置标注错误,然后按照第一种情况进行处理。
    在这里插入图片描述3.兄弟节点是黑色
    3.1 兄弟节点没有儿子是红色节点,染红兄弟
    3.1.1 父亲为红色,染黑父亲
    在这里插入图片描述
    3.1.2 父亲为黑,对父亲节点进行修复双黑
    在这里插入图片描述
    3.2 兄弟有红色儿子,不能直接染红黑色
    3.2.1 直线型(兄弟的红色儿子和兄弟在树的同侧)
    在这里插入图片描述
    3.2.2 三角型(兄弟的红色儿子和兄弟在树的不同侧)
    在这里插入图片描述
    实例:
    Step1:准备一棵红黑树,然后删除500
    在这里插入图片描述
    Step2:交换500和602节点的值,删除500节点
    在这里插入图片描述
    Step3 :删除300,其替换节点是388,删除后如下图所示
    在这里插入图片描述
    Step4:删除388,其替换节点是400,最终删除400

Step4.1 交换删除节点和替换节点的值
在这里插入图片描述
Step4.2 删除388节点

Step4.2.1 删除节点的兄弟节点是红色,先左旋父节点
Step4.2.2 将父亲节点染,染黑兄弟节点,
Step4.2.3 388节点的兄弟节点是黑色,且没有红色孩子,染红兄弟节点,父亲为红色,染黑父亲节点
在这里插入图片描述
本文根据观看视频,所做笔记,仅供参考,如果有问题,欢迎留言讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值