红黑树简单介绍

news2024/11/26 10:22:30

1. 概念介绍


红黑树是一种自平衡二叉查找树,由于自平衡的特性,保证了最坏情况下在O(logn)时间复杂度内完成查找、增加、删除等操作,性能表现稳定。
在JDK中,TreeMap、TreeSet以及JDK1.8的HashMap底层都采用了红黑树。

2. 为什么需要红黑树


由于二叉查找树在节点值顺序排序时会退化为一个线性结构,树的高度为节点个数,此时查找时间复杂度会变为O(n)。为了解决这个缺陷,红黑树便诞生了。

3. 红黑树特点


  1. 每个节点非红即黑,黑色决定平衡,红色不决定平衡
  2. 根节点总是黑色
  3. 每个叶子节点都是黑色的空节点(NIL节点,有时会不进行显示)
  4. 如果节点是红色的,则它的子节点必须是黑色的(反之不一定)。通常这条规则也叫不会有连续的红色节点,一个节点最多会有3个节点,中间是黑色节点,左右是红色节点。
  5. 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。每一层都只是有一个节点贡献了树高决定平衡性,也就是对应红黑树的黑色节点。

4. 红黑树结构实现


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. 左倾染色
    ![[Pasted image 20240320100111.png]]
  • 染色时根据当前节点的爷爷节点,找到当前节点的叔叔节点
  • 再把父节点染黑、叔叔节点染黑,爷爷节点染红。但爷爷节点染红是临时的,当平衡树高操作后会把根节点染黑。
  1. 右倾染色
    ![[Pasted image 20240320100257.png]]

  2. 左旋调衡
    一次左旋
    ![[Pasted image 20240320100354.png]]

右旋+左旋
![[Pasted image 20240320100447.png]]

  1. 右旋
    一次右旋
    ![[Pasted image 20240320100538.png]]

左旋+右旋
![[Pasted image 20240320100542.png]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据之王国:解析Facebook的大数据应用

引言 作为全球最大的社交媒体平台之一&#xff0c;Facebook拥有庞大的用户群体和海量的数据资源。这些数据不仅包括用户的个人信息和社交行为&#xff0c;还涵盖了广告点击、浏览记录等多方面内容。Facebook通过巧妙地利用这些数据&#xff0c;构建了强大的大数据应用系统&…

面向航天器大数据安全传输的发布/订阅系统设计

源自&#xff1a;系统工程与电子技术 作者&#xff1a;覃润楠 彭晓东 谢文明 惠建江 冯渭春 姜加红 “人工智能技术与咨询” 发布 摘 要 针对航天器试验任务过程监控的在轨故障诊断状态检测、健康状态评估与航天器寿命预测等多个环节中, 海量试验数据在传输、共享、处…

若依 无法导入表名过长的表格

原因 在mapper文件中&#xff0c;有很多转换的语句&#xff0c;使用的是nvarchar类型&#xff0c;nvarchar类型的长度很长&#xff0c;但是默认长度是30位。超过30位就会被截断 解决方案 找到mapper文件中所有对表名转换的地方&#xff0c;把长度扩大到100

电脑所有文档底色变绿?记好这4个方法就足够!

“这是怎么回事呢&#xff1f;怎么我的电脑里面所有文档底色都变绿了呢&#xff1f;我应该怎么操作才可以解决这个问题呀&#xff1f;” 在使用电脑的过程中&#xff0c;有时我们可能会遇到电脑所有文档底色变绿的情况。这种情况不仅影响了文档的阅读体验&#xff0c;还可能对视…

Visual Studio - 添加快捷键图标

Visual Studio - 添加快捷键图标 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize2. Toolbars3. Commands -> Debug4. Add Command...References 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize 2. Toolbars B…

【CSS】html滚动条相关

1.滚动条样式 ::-webkit-scrollbar {width: 10px;height: 10px;z-index: 101; } ::-webkit-scrollbar-thumb {border-radius: 5px;background: #cecece; } ::-webkit-scrollbar-track {// background: #f5f5f5be;background: rgba(33, 85, 163, 0); } ::-webkit-scrollbar-but…

热插拔技术详解(下)

4、热插拔导致的浪涌问题及其防治 &#xff08;1&#xff09;浪涌的概念 浪涌&#xff08;Electrical Surge&#xff09;顾名思义就是瞬间出现超出稳定值的峰值&#xff0c;它包括浪涌电压和浪涌电流。 浪涌电压是指超出正常工作电压的瞬间过电压&#xff1b;浪涌电流是指电源…

基于springboot+vue的疫情信息管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

AI助手 - 月之暗面 Kimi.ai

前言 这是 AI工具专栏 下的第四篇&#xff0c;这一篇所介绍的AI&#xff0c;也许是截至今天&#xff08;204-03-19&#xff09;国内可访问的实用性最强的一款。 今年年初&#xff0c;一直看到有人推荐 Kimi&#xff0c;不过面对雨后春笋般的各类品质的AI&#xff0c;说实话也有…

IP地址的分配:数字世界的地址规划者

在互联网的世界里&#xff0c;IP地址扮演着类似于房屋地址的角色&#xff0c;是用于标识和定位互联网上每个连接到网络的设备的唯一标识符。然而&#xff0c;这些IP地址并非随意分配&#xff0c;而是经过精心规划和管理的。本文将探讨IP地址的分配方式&#xff0c;揭示数字世界…

媒体邀约专访的意义?怎么做

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约专访是指企业、组织或个人主动邀请媒体进行专题访谈的一种公关活动。这种活动对于提升品牌形象、传播信息、增强公众认知度和信任度等方面都有重要作用。以下是媒体邀约专访的一…

zabbix监控FortiGate防火墙 FortiGate配置SNMP

SNMP&#xff08;Simple Network Management Protocol&#xff09;是一种常用的监控方式。在Zabbix中&#xff0c;可以通过配置SNMP来监控网络设备和服务器。具体步骤如下&#xff1a; 1.FortiGate防火墙开启SNMP 登录防火墙&#xff0c;配置SNMP&#xff1a; 团体名称&#…

【探索Linux】—— 强大的命令行工具 P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)

阅读导航 引言一、UDP协议二、UDP网络程序模拟实现1. 预备代码⭕makefile文件⭕打印日志文件⭕打开指定的终端设备文件&#xff0c;并将其作为标准错误输出的目标文件描述符 2. UDP 服务器端实现&#xff08;UdpServer.hpp&#xff09;3. UDP 客户端实现&#xff08;main函数&a…

使用Redis做缓存的小案例

如果不了解Redis&#xff0c;可以查看本人博客&#xff1a;Redis入门 Redis基于内存&#xff0c;因此查询速度快&#xff0c;常常可以用来作为缓存使用&#xff0c;缓存就是我们在内存中开辟一段区域来存储我们查询比较频繁的数据&#xff0c;这样&#xff0c;我们在下一次查询…

服装行业实现数字化转型,只需上线这个系统!

近年来&#xff0c;内卷、降本增效等词频频冲上热搜&#xff0c;随着经济的周期性下行&#xff0c;服装企业的竞争愈发激烈&#xff0c;小单快返时代的到来&#xff0c;加速了服装行业的重新洗牌。在这样的大环境下&#xff0c;服装企业数字化转型几乎成了取得确定性增长的唯一…

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…

Sublime Text3 C/C++一键调试运行代码

minGW的系统环境配置&#xff1a; 使用的C/C编译器是minGW&#xff0c;点此进入官网链接&#xff0c;下载后需要在线安装&#xff0c;安装后需要将安装目录下的bin目录所在路径加入path环境变量。本菜鸡的电脑里安装了CodeBlocks&#xff0c;在CodeBlocks的安装目录下有MinGW&…

婴儿洗衣机十大排名名牌:十款超高价值婴儿洗衣机综合整理

我们都知道宝宝的皮肤是超级娇嫩的&#xff0c;宝宝的衣物也一样&#xff0c;宝宝的衣物大部分都是纯棉的。如果将宝宝的衣物和大人衣服一起扔进大型洗衣机混洗&#xff0c;更可能出现细菌交叉感染&#xff0c;对小宝宝来说百害而无一利&#xff0c;会让小宝宝肌肤过敏、红肿、…

json字符串的数据提取

json的数据提取 学习目标 掌握 json相关的方法(load loads dump dumps)了解 jsonpath的使用(提取 json中的数据) 2 复习什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和…

蓝牙耳机哪个品牌质量比较好?真实用户实测推荐!

​一款舒适的蓝牙耳机能让你长时间沉浸在音乐之中&#xff0c;享受无拘无束的听音体验。但对于许多朋友来说&#xff0c;选择合适的蓝牙耳机可能是个难题。别担心&#xff0c;我来为你推荐几款既舒适又音质出色的蓝牙耳机&#xff0c;让你的选择变得更加简单。 一、蓝牙耳机这样…