算法Note——红黑树

大家好,我是小黄鸭,日常学习算法的Note。


概要

红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer 于1978年发明,在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树。红黑树具有良好的效率,它可在 O(logN) 时间内完成查找、增加、删除等操作。因此,红黑树在业界应用很广泛,比如 Java 中的 TreeMap,JDK 1.8 中的 HashMap、C++ STL 中的 map 均是基于红黑树结构实现的。考虑到红黑树是一种被广泛应用的数据结构,所以我们很有必要去弄懂它。


一、红黑树的性质

  1. 每个结点不是红色就是黑色。
  2. 不可能有连在一起的红色结点。
  3. 根结点都是黑色root。
  4. 每个红色结点的两个子结点都是黑色,叶子结点都是黑色。

二、变换规则

旋转和颜色变换规则:所有插入的点都默认为红色

变颜色的情况

当前结点的父亲是红色,叔叔结点也是红色

  1. 把父亲结点设为黑色
  2. 把叔叔结点也设为黑色
  3. 把祖父结点设为红色(爷爷)
  4. 把指针定义到祖父结点设为当前要操作的,分析其需要的变换规则。
    变颜色

左旋

当前父结点是红色,叔叔结点是黑色的时候,且当前的结点是右子树。左旋以父节点作为旋转中心。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

右旋

当前父结点是红色,叔叔是黑色的时候,且当前的结点是左子树

  1. 把父结点变为黑色
  2. 把祖父结点变为红色
  3. 以祖父结点作为旋转中心进行旋转。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

整体来说,对于红黑树具体了解不是很多,每次看到也只是想着下次一定去仔细学习一下,这次终于又机会学了了下,不过相对来说也只是红黑树的皮毛,只涉及到了基本的性质与构造,具体还有待更深入的学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_AoSnow_

创作不易,打赏打赏些8

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值