数据结构-----红黑树简介

news2025/2/23 17:29:24

 目录

前言

1.什么是红黑树?

 2.为什么需要红黑树?(与AVL树对比)

 3.红黑树的特性


前言

        在此之前我们学习过了二叉排序树和平衡二叉树(AVL树),这两种树都是属于搜索树的一种,那么今天我们就开始学习一种新的搜索树,即红黑树,可能在接触二叉树学习的时候我们就听说过了红黑树,当然我们也知道,红黑树相较于前面所学的数据结构(链表、栈、队列、堆……)都难上了很多倍,那么这一期我就来初步的介绍红黑树的相关特性和其知识点,后面我会详细发布关于红黑树的文章来进一步介绍红黑树的操作和代码实现,废话不多说,开始今天的学习吧!

相关链接:

二叉排序树:数据结构-----二叉排序树_Gretel Tade的博客-CSDN博客

AVL树:数据结构-----平衡二叉树_Gretel Tade的博客-CSDN博客 

1.什么是红黑树?

        红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer 于1972年发明,在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树。

红黑树如图所示: 

 2.为什么需要红黑树?(与AVL树对比)

在此之前我们学习了AVL树,既然AVL树有了高效率的查找功能,那需要红黑树干什么呢?下面看对比就知道了。

红黑树(Red-Black Tree)和AVL树(Adelson-Velsky and Landis Tree)都是自平衡二叉搜索树,用于在动态数据集上进行高效的插入、删除和搜索操作。它们之间有一些相似之处,但也存在一些关键的区别。如下所示:

平衡性比较:

AVL树:平衡二叉树是一种绝对平衡的二叉树,其满足每个节点的左右子树的高度只差不超过1,所以其在查找方面上是非常迅捷的,但是在插入和删除操作的时候要不断去旋转来满足平衡条件。

红黑树:红黑树是一种弱平衡的二叉树,其不需要像AVL树那样满足左右子树高度差不超过1,红黑树树的高度最多是2倍的对数级别,所以红黑树的插入和删除操作方面更具有灵活性,但是有一些方面性能还是不如AVL树的。

插入和删除性能比较:

AVL树:AVL树在插入和删除过程中必须满足绝对平衡,所以要频繁的进行旋转操作,时间复杂度比较大

红黑树:红黑树是满足弱平衡状态,有红黑两种颜色去控制树的结构,在插入和删除过程中不需要多次旋转操作,这方面是优于平衡二叉树的。

操作效率比较:

AVL树:平衡二叉树满足绝对平衡,其查找效率绝对是最快的,时间复杂度为 O(logn).

红黑树:虽然红黑树的查找时间复杂度也是O(logn),但是相较于平衡二叉树,操作速度是要慢一些的。

对比总结

AVL树:适合应用于搜索场景,以查为主。

红黑树:适合用于频繁插入、删除场景,其实用性更加强。

总的来说各有各的特色吧,现实生活和工作中用的比较多的方面那肯定是红黑树的了,所以学好红黑树很重要!!!

红黑树的相关应用场景:

红黑树具有良好的效率,它可在 O(logN) 时间内完成查找、增加、删除等操作。因此,红黑树在业界应用很广泛,比如 Java 中的 TreeMap,JDK 1.8 中的 HashMap、C++ STL 中的 map 均是基于红黑树结构实现的。  

 3.红黑树的特性

        既然知道了红黑树的优秀,多余的就不多说了,所以这里就开始学习红黑树的知识点了,首先先了解红黑树的特性,需要什么条件才可以满足红黑树。

对于一个红黑树必须满足以下的6个特性:

1.红黑树是一个二叉排序树

2.每个节点要么是红色,要么是黑色

3.根结点是黑色的

4.叶子节点(外部节点,NULL节点、失败的节点)都是黑色的

5.红色节点的父节点和子节点都是黑色的(不存在两个相邻的红色节点)

6.对于每一个节点,从该节点到任一叶子结点的路径上,其所含黑色节点的数量相同

红黑树上面这6条性质可能对于有些人不太好记住或者记错,别急,我下面送各位一个顺口溜,保证你们看了就懂: 

 顺口溜解释:

左根右:表示红黑树满足 左子节点<根节点<右子节点,也就是满足排序条件

根叶黑表示跟节点和叶子节点都是黑色的

不红红表示不能有两个连续的红色节点(父节点和子节点不可能同时是红色的)

黑路同:表示从任意应该节点走到子节点路径上的黑色节点数量是相同的

 记住了这个顺口溜就等于记住了红黑树的特性,是不是很简单呢?来下面看几个简单的判断是否为红黑树的示例:

示例1: 

很明显这个不是红黑树,为什么呢?没有排序啊!!!

示例2:

 这个也不是红黑树,因为不满足 “不红红” 的特性。

示例3:

 这个也不是红黑树,可能有点不太好看,看到13->8->1->6 这条路径,发现有什么不同呢?很明显,这里不满足 “黑路同” 的性质,相较于其他路径这里多了一个黑色节点的数量。

 这一期就先介绍到这里,先初步认识一下红黑树,下一期我们就正式开始进入到了红黑树的深入学习,包括节点的插入和删除等操作,我们下次见咯!

分享一张壁纸:

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

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

相关文章

计算机毕业设计 无人智慧超市管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

FSM人物动画状态机

人物动画状态机 介绍FSM角色模型的设置角色动作的设置角色动画控制器的设置书写角色动画的具体状态&#xff0c;实现缓动起步的FSM总结 介绍 摇杆我就不介绍了&#xff0c;之前我在这里面讲过怎么用摇杆&#xff0c;摇杆连接。 这里我先说下什么是FSM人物动画状态机&#xff0…

文心一言 VS 讯飞星火 VS chatgpt (114)-- 算法导论10.2 7题

七、用go语言&#xff0c;给出一个 O(n)时间的非递归过程&#xff0c;实现对一个含 n个元素的单链表的逆转。要求除存储链表本身所需的空间外&#xff0c;该过程只能使用固定大小的存储空间。 文心一言&#xff1a; 在Go语言中&#xff0c;你可以使用迭代方法来反转一个单链表…

【C++】:string用法详解

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

算法通过村第十四关-堆|黄金笔记|中位数

文章目录 前言数据流中的中位数的问题总结 前言 提示&#xff1a;我独自度过了太多的时光&#xff0c;沉默已成一种习惯。 帕瑞尔马卡姆《夜航西飞》 这个是一个比较难的题目&#xff0c;要不尝试一下看看。 数据流中的中位数的问题 参考题目地址&#xff1a;295. 数据流的中位…

身为程序员,你很有必要了解一下JNPF

一、JNPF是什么&#xff1f; JNPF是一个“低代码”的可视化编程平台&#xff0c;采用J2EE技术体系&#xff0c;基于Spring Boot框架封装的快速开发平台&#xff0c;包含多种开箱即用的功能&#xff0c;具备RBAC、自动生成代码、SaaS多租户等多个功能和模块。 JNPF&#xff0c;重…

真人现在猫鼠躲猫猫游戏搭建流程:专业思考与深度思考

真人现在猫鼠躲猫猫游戏是种充满乐趣和挑战的团队竞技游戏。本文将从游戏规则设计、场地布置、技术实现和用户体验等方面&#xff0c;深入探讨人现在猫鼠躲猫猫游戏的搭建流程&#xff0c;并结合专业思考与深度思考&#xff0c;为游戏搭建提供全面指导。 一、游戏规则设计&…

【uboot】Uboot的启动流程

引言 在驱动岗位上&#xff0c;每一位新员工刚入职期间都需要理解和掌握uboot&#xff0c;但深入的理解代码往往需要耗费大量的时间去反复阅读。本文希望对uboot进行尽可能详细的解析&#xff0c;帮助其他人更快的掌握和理解uboot源码。 准备工作 uboot源码 本文是基于Hi35…

Redux详解(二)

1. 认识Redux Toolkit Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法。 通过传统的redux编写逻辑方式&#xff0c;会造成文件分离过多&#xff0c;逻辑抽离过于繁琐&#xff08;具体可看上篇文章 Redux详解一&#xff09;&#xff0c;React官方为解决这一问题&#xff0c;推…

【设计模式】单例模式、“多例模式”的实现以及对单例的一些思考

文章目录 1.概述2.单例模式实现代码2.1.饿汉式单例2.2.懒汉式单例2.3.双检锁单例2.4.静态内部类单例2.5.枚举单例 3.对单例的一些思考3.1.是否需要严格的禁止单例被破坏&#xff1f;3.2.懒汉式真的比饿汉式更佳吗&#xff1f;3.3.单例存在的问题 4.其他作用范围的单例模式4.1.线…

空调原理与结构、制冷剂类型及相关先进技术

一、空调相关知识 1. 空调定义 空调是指利用各种技术和设备对某一空间内空气的温度、湿度、洁净度和流速进行调节&#xff0c;以满足人们对舒适性要求或不同工艺环境要求。 2. 基本原理 蒸发吸热、冷凝放热 压力越低沸点越低 3. 空调主要结构 空调主要由压缩机、冷凝器、…

求臻医学:MRD的十八般武艺 AI双驱动流派

作为专注于肿瘤精准诊疗领域的国家高科技企业&#xff0c;求臻医学依托《中国肿瘤基因图谱计划》和《肿瘤精准医学大数据平台》项目&#xff0c;围绕肿瘤诊断监测、预后评估、肿瘤早筛、遗传筛查、药物研发服务等场景&#xff0c;开发了针对肺癌、结直肠癌、胃癌、前列腺癌等实…

【Qt高阶】Qt D-Bus 简介【2023.10.16】

Qt D-Bus介绍 简介总线技术名词消息&#xff08;阐述总线的消息内涵&#xff09;服务名对象路径接口备忘表(便于记住名字的格式)调试 麒麟V10 与D-Bus 简介 D-Bus 是一个进程间通信(IPC)和远程过程调用(RPC)机制,最初是为了 Linux 开发,用来取代现有的竞争的 IPC 解决方案,提供…

交通部 EDI是什么?如何处理?

交通部于1996年开始实施《国际集装箱运输电子信息传输和运作系统及示范工程》&#xff0c;即在中国远洋运输集团、上海口岸、宁波口岸、天津口岸和青岛口岸建立 EDI 示范工程。 交通部 EDI 的数据结构 电子口岸或者其他物流企业需要确保能够生成和解析符合交通部要求的EDI数据…

两个pdf合并成一个pdf?

两个pdf合并成一个pdf&#xff1f;pdf合并是我们在处理PDF中非常常见的一个操作。我们看似有很多方法能够实现这一操作&#xff0c;但是真正适合自己的方法确实能够帮助我们很多。那么多方法的话&#xff0c;小编今天打算汇总几个比较适合新手的快速方法&#xff0c;这样效率更…

建立线上线下一体化营销体系,数字化营销系统必不可少

​在当今的市场环境中&#xff0c;实体行业想要取得持续的收入增长&#xff0c;必须将线上线下业务相结合&#xff0c;充分利用数字化营销系统的功能&#xff0c;以构建“全链路式”数字化营销体系。 而数字化营销系统中&#xff0c;常见的如分销系统、拼团系统、分红系统、积分…

mission planner通过串口连接3DR数传,远程飞控

前提 pixhaw2.4.8已布线&#xff0c;有单独的电源供电&#xff0c;通过电量计接power接口 电量计的输入端接24V电源&#xff0c;飞控的输入是5v电源&#xff0c;电量计上有个模块可以分压将5v的电输入到飞控 数传接在接口telem 2上&#xff08;一个接飞控&#xff0c;一个接电…

用浏览器进行web应用测试,你会怎么做?

有没有遇到这样的一个场景&#xff1a;你在使用浏览器进行web应用测试&#xff0c;但是你想知道你在测试过程中的前端输出和后端响应的情况究竟如何。那么&#xff0c;你会怎么做呢&#xff1f;想必大多人会毫不犹豫地回答&#xff1a;通过浏览器console面板和network面板抓取信…

idea使用debug无法启动,使用run可以启动

1、将调试断点清除 使用快捷键ctrl shift F8&#xff0c;将勾选的选项去除即可 2、Error running SampleApplication: Command line is too long. Shorten command line for SampleApplication or also for Spring Boot default configuration&#xff0c;报这种错误&#x…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(五):有损传输线的特性阻抗和信号传输速度

有损传输线的特性阻抗 理想有损传输线特性阻抗是和频率相关的&#xff0c;很复杂。可以有以下公式&#xff1a; 按照代数知识&#xff0c;特性阻抗的实部和虚部如下&#xff1a; 其中RL表示单位长度导体的串联电阻 CL表示单位长度电容 LL单位长度串联环路电感 GL电介质单位长度…