小笔记——红黑树

红黑树

是一种特殊的二叉查找树。红黑树每个节点上都有存储为表示节点的颜色,可以是红或黑

特点

  • 每个节点是黑色或者是hongse
  • 根节点是黑色
  • 每个叶子节点(NIL or NULL)是黑色
  • 如果一个节点是红色的,则它的叶子节点必须是黑色的
  • 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点
    在这里插入图片描述

红黑树的基本旋转

1. 左旋

在这里插入图片描述
伪代码:

// 先考虑子节点,再考虑父结点,最后考虑两者相互的关系
left-rotate(T, x)
y = x->right	// 原树
x->right = y->left	// x的右节点变为y的左节点
y->left->parent = x	// x变为β的父结点
y->parent = x->parent	// y 的父亲变为x的父亲
// 如果x的父结点是空节点,则y直接是根节点
if x->parent == T->nil
	T->root = y
else if x == x->parent->left	// 如果x的节点是它父结点的左节点,那y就是其左节点
	x->parent->left = y
else
	x->parent->right = y
y->left = x
x->parent = y
2. 右旋

在这里插入图片描述

right_rotate(T, x)
x = y->left
y->left = x->right
x->right->parent = y
x->parent = y->parent
if y->parent ==NIL
	T->root = x
else if y== y->parent->right
	y->parent->right = x
else
	y->parent->left = x
x->right = y
y->parent = x

红黑树的基本插入

首先将其当作一颗二叉树进行插入,然后将节点着色为红色,通过旋转、重新着色等方式进行修正,使其成为一颗新的红黑树。
小问题:为什么要将插入节点着色为红色?
answer:插入红色节点不会违背特性5,只可能违背特性4(特性5是较难维持的),可以通过旋转或者着色来使之成为新的红黑树。

根据被插入的节点的父结点情况,“节点被着色为红色,并插入二叉树”主要分为三种情况处理:

  • 被插入的节点是根节点——>直接将此节点涂黑

  • 被插入的节点的父结点是黑色——>啥也不用干

  • 被插入的节点父结点是红色——>还有三种情况
    case1. 当前的父结点是红色,且当前节点的祖父节点的另一个子节点也是红色
    case2. 当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的右孩子
    case3. 前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的左孩子

    上面三种情况(Case)处理问题的核心思路都是:将红色的节点移到根节点;然后,将根节点设为黑色。

  • case1:它爸和它叔是红色
    在这里插入图片描述
    把它爸它叔都变成黑色,它祖父变成红色,然后把祖父设为当前节点,继续对当前节点进行操作(意思就是祖父的爸爸和叔叔如果都是红色,那得把祖父的爸爸叔叔都变成黑色)

  • case2:他叔是黑色,且它是它爸的右儿砸(感觉这图有点不对啊)

    把父结点作为当前节点,为当前节点左旋,再把父结点作为当前节点,右旋(从底至上,把根节点变为红色节点,再染成黑色)

  • case3:他叔是黑色,它是它爸的左儿砸
    在这里插入图片描述
    把它爸变为黑色,把祖父节点变为红色。以祖父节点为支点右旋。再将120当成当前节点,同case2。

红黑树的基本删除

当成一颗二叉查找树中删除,然后通过“旋转和重新着色”等一系列来修正该树,使之成为一个新的红黑树

删除的过程与常规的二叉查找树相同,关键是重新使其变为红黑树的步骤:
(未完待续)
红黑树(一)之 原理和算法详细介绍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值