当前位置: 首页 > news >正文

数据结构—红黑树

红黑树介绍

红黑树(Red Black Tree)是一种自平衡二叉查找树。由于其自平衡的特性,保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作,性能表现稳定。

在 JDK 中,TreeMap、TreeSet 以及 JDK1.8 的 HashMap 底层都用到了红黑树。

为什么需要红黑树

红黑树的诞生就是为了解决二叉查找树的缺陷。

二叉查找树是一种基于比较的数据结构,它的每个节点都有一个键值,而且左子节点的键值小于父节点的键值,右子节点的键值大于父节点的键值。这样的结构可以方便地进行查找、插入和删除操作,因为只需要比较节点的键值就可以确定目标节点的位置。

但是,二叉查找树有一个很大的问题,就是它的形状取决于节点插入的顺序。如果节点是按照升序或降序的方式插入的,那么二叉查找树就会退化成一个线性结构,也就是一个链表。这样的情况下,二叉查找树的性能就会大大降低,时间复杂度就会从 O(logn) 变为 O(n)。

红黑树的诞生就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。

红黑树特点

  1. 每个节点非红即黑。黑色决定平衡,红色不决定平衡。
  2. 根节点总是黑色的。
  3. 每个叶子节点都是黑色的空节点也就是 NIL 节点。这里指的是红黑树都会有一个空的叶子节点,是红黑树自己的规则。
  4. 如果节点是红色的,则它的子节点必须是黑色的,反之不一定。通常这条规则也叫不会有连续的红色节点。一个节点最多临时会有 3 个节点,中间是黑色节点,左右是红色节点。
  5. 从任意节点出发,沿着这个节点到达其所有叶子节点的路径上,经过的黑色节点的数量必须相同。每一层都只是有一个节点贡献了树高决定平衡性,也就是对应红黑树中的黑色节点。

正是这些特点才保证了红黑树的平衡,让红黑树的高度不会超过 2log(n+1)。

红黑树数据结构

建立在 BST 二叉搜索树的基础上,AVL、2-3 树、红黑树都是自平衡二叉树(统称 B-树)。但相比于 AVL 树,高度平衡所带来的时间复杂度,红黑树对平衡的控制要宽松一些,红黑树只需要保证黑色节点平衡即可。

红黑树结构实现

public class Node {public Class<?> clazz;public Integer value;public Node parent;public Node left;public Node right;// AVL 树所需属性public int height;// 红黑树所需属性public Color color = Color.RED;}

1.左倾染色

  • 染色时根据当前节点的爷爷节点,找到当前节点的叔叔节点。
  • 再把父节点染黑、叔叔节点染黑,爷爷节点染红。但爷爷节点染红是临时的,当平衡树高操作后会把根节点染黑。

2.右倾染色

3.左旋调衡

一次左旋

右旋+左旋

4.右旋调衡

一次右旋

左旋+右旋

http://www.lryc.cn/news/335559.html

相关文章:

  • MES实施之工控机和电脑的选择
  • 京东云服务器4核8G主机租用价格418元一年,1899元3年
  • 【多模态融合】MetaBEV 解决传感器故障 3D检测、BEV分割任务
  • [通俗易懂]《动手学强化学习》学习笔记1-第1章 初探强化学习
  • centOS如何升级python
  • 【MYSQL锁】透彻地理解MYSQL锁
  • 【静态分析】静态分析笔记01 - Introduction
  • 使用的sql
  • 【ZZULIOJ】1052: 数列求和4(Java)
  • 【Linux】tcpdump P3 - 过滤和组织返回信息
  • vscode免费登录ssh ,linux git配置免密码
  • Netty 心跳(heartbeat)——服务源码剖析(上)(四十一)
  • C语言—每日选择题—Day65
  • 【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改
  • 5.7Python之元组
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果
  • 如何通过VPN访问内网?
  • RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表
  • 常用脚本01 - 生成证书
  • 【jQuery】jQuery框架
  • 使用OMP复原一维信号(MATLAB)
  • Linux安装最新版Docker完整教程
  • iOS object-c self关键字总结
  • 京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽
  • hive管理之ctl方式
  • cpp 内存分区模型
  • 44.网络游戏逆向分析与漏洞攻防-角色管理功能通信分析-角色创建服务器反馈数据包分析
  • web安全学习笔记(6)
  • 揭秘“二次放号查询接口”:为您的通信安全保驾护航
  • 字节8年经验之谈 —— 如何实现高效的自动化渗透测试?