红黑树

本文章中的图片取自 算法 第四版

二叉查找树在特定的条件下的性能会非常差, 比如 插入n个键的大小是按大小顺序排列好的, 则树的高度则变为n

在这里插入图片描述

为了解决这个问题, 发明了2-3树, 而红黑树就是对2-3树的实现。

2-3树:

2-3树中分为 2-节点和3-节点。
2-节点就是标准的二叉查找树中的节点, 2-节点由一个键值对、两条链接组成。
3-节点中, 由两个2-3节点组成, 3-节点由两个键值对、三条链接组成。

在构建2-3树时, 为了保持树的完美平衡性, 要分多种情况。

一、 向2-节点中插入新键
在插入新键时, 先按照二叉查找树进行一次查找, 若找到此键则更新值, 若为找到并且查找结束于一个2-节点,则直接把键插入到2-节点变为3-节点。

在这里插入图片描述
二、 向一棵只含有一个3-节点的树插入新键
直接把该键插入到3-节点使其变为临时的4-节点, 然后把4-节点分解为3个2-节点。
在这里插入图片描述
三、 向父节点为2-节点的3-节点插入新键
先将键插入到3-节点使其变为4-节点, 然后把4节点中键的大小第二的键移到父节点, 使父节点变为3-节点。
在这里插入图片描述
四、向父节点为3-节点的3-节点插入新键
先将键插入3-节点变为4-节点, 然后把4节点中排名中间的键移到父节点, 然后将父节点中排名中间的键移到它的父节点,直到某个节点为2-节点或者到达根节点。

在这里插入图片描述
五、 分解根节点
若第四种情况 一直移动到了根节点, 使根节点变为4-节点, 则分解根节点,步骤跟第二
种情况类似。

一棵2-3树的构造过程如下图:
在这里插入图片描述
但2-3树的实现很复杂, 例如:需要有2-、3-、4-三种节点。这些额外的开销可能会比标准的二叉搜索树更慢, 得不偿失, 红黑树由此而生。

红黑树

在红黑树中,有几种规则:

1: 在树中, 节点的颜色只有红色和黑色两种。
2:根节点是黑色的。
3:每个叶子节点都是黑的。(或者NULL节点)
4:红节点的儿子节点为黑。
5:任意一个叶子节点到根节点的每条路径都含有相同数目的黑节点。

红节点其实指的是红链接, 指向该节点的链接若为红色, 则该节点为红节点。
红色节点其实就是对应于2-3树中的3-节点, 若把红节点与其黑的父节点放平, 就变为了一棵2-3树。
在这里插入图片描述

先介绍红黑树的旋转。
旋转分为左旋和右旋两种。

左旋: 把右侧的红链接变为左侧。
步骤: 把红节点的左节点给其父节点的 右节点, 然后把红节点和父节点交换。

右旋: 把左侧的红链接变为右侧
步骤: 把红节点的右节点为其父节点的左节点, 然后交换。

在这里插入图片描述
为了简化红黑树, 规定不允许存在红色右节点
红黑树的构建:
一、 在2-节点中插入新键
在这里插入图片描述
二、向3-节点插入新键

在这里插入图片描述

在这里插入图片描述

红黑树的构造过程:

在这里插入图片描述
删除操作:
因为直接删除可能会影响树的完美平衡性, 所以若被删除节点为2-节点, 要进行处理。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值