查找算法之红黑二叉查找树

红黑二叉查找树背后的基本思想是用标准的二叉查找树(完全由2-节点构成)和一些额外信息(替换3-节点)来表示2-3树。我们将树中的链接分为两种类型:红链接将两个2-节点连接起来构成3-节点,黑链接是2-3树中的普通链接。确切地说,我们将3-节点表示为由一条左斜的红色链接(两个2-节点其中之一是另一个的左子节点)相连的两个2-节点
这里写图片描述

定义

红黑树的另一种定义是含有红黑链接并满足下列条件的二叉树:
1、红链接均为左链接
2、没有任何一个节点同时和两条红链接相连
3、该树是完美黑色平衡的,即任意空链接到根节点的路径上的黑链接数量相同

一一对应

我们将一棵红黑树的红链接画平,那么所有的空链接到根节点的距离都是相同的。如果我们将由红链接相连的节点合并,得到的就是一棵2-3树

旋转

左旋转

当红色链接出现在右链接的时候,必须要进行左旋转
这里写图片描述

右旋转

当出现两条连续的红链接时,进行右旋转。
这里写图片描述

颜色反转

当出现一个临时的4-node的时候,即一个节点的两个子节点均为红色,如下图
这里写图片描述
需要将E提升为父节点,就是把E对应的子节点的连线设置为黑色,自己的颜色设置为红色

插入

往一个2-node节点底部插入新的节点

首先我们看对于只有一个节点的红黑树,插入一个新的节点的操作:
这里写图片描述
这种情况很简单,只需要:
标准的二叉查找树遍历即可,新插入的节点标记为红色
如果新插入的节点在父节点的右子节点,则需要进行左旋操作。

往一个3-节点底部插入新的节点

先假设往只有两个节点的树中插入元素,如下图,根据待插入元素与已有元素的大小,可以分为三种情况:
这里写图片描述

有了以上基础,总结一下往3-节点底部插入新的节点的操作步骤,下面是典型的操作过程图:
这里写图片描述

步骤如下:
1、执行标准的二叉查找树插入操作,新插入的节点元素用红色标识。
2、如果需要对4-node节点进行旋转操作
3、如果需要,调用FlipColor方法将红色节点提升
4、如果需要,左旋操作使红色节点左倾
5、在有些情况下,需要递归调用

构造

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值