红黑树详解(一)红黑树的介绍和操作

红黑树详解(一)红黑树的介绍和操作


摘要:

    在很多源码涉及到大量数据处理的时候,通常都是用红黑树这一数据结构。红黑树是一种自平衡的二叉查找树,它能在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,获得较高的查找性能。本文将使用图文详细的分析红黑树

红黑树详解(一)红黑树的介绍和操作
红黑树详解(二)红黑树的插入(附动图和案例)

一、红黑树解决了什么问题

​ 首先,我们要知道二叉搜索树,在不为空的情况下,左子树上所有结点的值均小于它的根结点的值,右子树上所有结点的值均大于它的根结点的值。它使得数据查找起来不是线性查找(O(n)),平均复杂度仅仅为O(log(n)).

在这里插入图片描述

​ 但是在最快情况下,二叉搜索树可能变为线性搜索,退化为链表,复杂度为O(n),那就没有意义了,如下图的情况所示。

在这里插入图片描述

​ 为了避免这种情况发生,就到了我们的主角红黑树,它规定了一些性质使得这种情况不会发生。

二、红黑树的性质

​ 红黑树主要有这五条性质。

  • 1.节点不是红色就是黑色
  • 2.根节点是黑色
  • 3.叶子节点(NIL)为黑色
  • 4.每个红色节点的两个子节点都是黑色。((从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点

如下图所示

在这里插入图片描述

三、红黑树的操作

​ 在进行红黑树的插入、删除时候,很可能会破坏红黑树的五条性质。因此,我们需要一些操作来维护红黑树五条性质不被破坏。主要有三种操作,变色、左旋右旋.

​ 为了更好的理解以下操作,这里规定一些叫法。

1.变色

​ 顾名思义,就是改变树结点的颜色。如果不能仅仅通过变色解决问题,就需要旋转操作。

2.左旋

​ 以结点p作为支点进行左旋,其左子结点不变,右子结点变为p的右子节点的左子结点,且p的父结点变为右子结点。

​ 支点为p,其父结点为pp,右子结点和左子结点为r和l,r的左右孩子分别为rl和rr。则示意图如下:

在这里插入图片描述

3.右旋

        以结点p作为支点右旋,其右子结点不变,左子结点变为其左子结点的右子结点,且p的父结点变为左子结点。

        支点为p,其父结点为pp,右子结点和左子结点为r和l,l的左右孩子分别为ll和lr。则示意图如下:

        如图所示

在这里插入图片描述
左旋右旋实际上是一边子树的结点少了,向另外一边子树借结点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值