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

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

 目录

前言

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 这条路径,发现有什么不同呢?很明显,这里不满足 “黑路同” 的性质,相较于其他路径这里多了一个黑色节点的数量。

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

分享一张壁纸:

相关文章:

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

目录 前言 1.什么是红黑树&#xff1f; 2.为什么需要红黑树&#xff1f;&#xff08;与AVL树对比&#xff09; 3.红黑树的特性 前言 在此之前我们学习过了二叉排序树和平衡二叉树&#xff08;AVL树&#xff09;&#xff0c;这两种树都是属于搜索树的一种&#xff0c;那么今天…...

哈佛教授因果推断力作:《Causal Inference: What If 》pdf下载

因果推断是一项复杂的科学任务&#xff0c;它依赖于多个来源的三角互证和各种方法论方法的应用&#xff0c;是用于解释分析的强大建模工具&#xff0c;同时也是机器学习领域的热门研究方向之一。 今天我要给大家推荐的这本书&#xff0c;正是因果推断领域必读的入门秘籍&#…...

Drecom 的《Eternal Crypt - Wizardry BC -》加入 The Sandbox 啦!

经典 “Wizardry” 游戏系列的新区块链迭代将通过全球合作拓展 Web3 游戏宇宙。 我们非常高兴地宣布&#xff0c;沙盒游戏公司与富有远见的传奇游戏《Wizardry》系列创造者 Drecom 将建立充满活力的合作伙伴关系。我们将共同推出《Eternal Crypt - Wizardry BC -》&#xff0c…...

外贸网站流量下降可能是这五点原因造成的

随着互联网的发展&#xff0c;企业开始重视网站优化&#xff0c;越来越多的人开始从事网站优化工作&#xff0c;然而真正做起来&#xff0c;很多站长朋友并非一帆风顺&#xff0c;往往越到很多问题&#xff0c;比如外贸网站流量出现异常下降情况&#xff0c;但很多时候在遇到外…...

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

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

【Redis】Java Spring操作redis

目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法&#xff0c;分成了几个类别&#xff0c;分门别类的来组织的。 此处提供的一些接口风格&#xff0c;和原生的Re…...

如何养好一个微信新号?

最近听到一句话&#xff0c;“微信是个完整的互联网”。 你还真别说&#xff0c;真是。如果你还觉得微信只是个聊天视频打电话的工具&#xff0c;那可就有信息差了。 微信有各种各样的小程序&#xff0c;有打车的&#xff0c;有交话费的&#xff0c;有游戏&#xff0c;可以说&a…...

flutter问题汇总

一直卡在building a flutter app for general distribution&#xff1b; AS Message窗口显示 依赖下载失败&#xff1a; 1、修改仓库地址的配置&#xff1a;android/build.gradle repositories {maven { url https://download.flutter.io }maven { url "https://maven.a…...

2.1 初探大数据

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;什么是大数据&#xff08;二&#xff09;大数据的特征1、Volume - 数据量大2、Variety - 数据多样3、Velocity - 数据增速快4、Value - 数据价值低5、Veracity - 数据真实性 &#xff08;三&#xff0…...

论自动化测试中的xpath | 多语言测试最新案例

XPath&#xff08;XML Path Language&#xff09;是一门在XML文档中查找信息的语言。XPath是XML处理中非常重要的组成部分&#xff0c;能大大简化文档的解析和处理。它与XSLT、XPointer等标准一起被广泛应用于XML的解析处理。 一般情况下&#xff0c;xpath主要应用在以下几个方…...

CSS基础详细解析(附带综合小练习)

目标&#xff1a;掌握 CSS 属性基本写法&#xff0c;能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#…...

react中ant.design框架配置动态路由

目录 什么是动态路由&#xff1f; 应用场景&#xff1a; ant.design动态路由如何配置&#xff1a; 首先&#xff1a;找到app.tsx文件 然后&#xff1a;找到menuHeaderRender 其次&#xff1a;修改menuHeaderRender为menuDataRender​编辑 最后&#xff1a;在箭头函数里re…...

Linux运行环境搭建系列-Openresty安装

安装Openresty 构建环境&#xff1a;腾讯云CentOS 7.9。 更新云库 yum update添加&&安装云库 wget https://openresty.org/package/centos/openresty.repo sudo mv openresty.repo /etc/yum.repos.d/ sudo yum check-update sudo yum install openresty安装命令行工具…...

React TreeSelect设置默认展开项的方法

需要实现TreeSelect组件的onTreeExpand、treeExpandedKeys方法。 代码样例如下&#xff1a; 1.TreeSelect标签部分 render() {const {codeselect} this.props;const {treeExpandedKeys} this.state ................<TreeSelectshowSearch{false}dropdownStyle{{ maxHei…...

Golang基础学习笔记

Golang基础学习笔记 1、下载安装 1.1、下载 Golang下载地址&#xff1a;https://golang.google.cn/dl/ 1.2、安装 1.3、环境变量 # GOPATH D:\GolandProjects# GOPROXY https://mirrors.aliyun.com/goproxy# 启用Go模块支持 go env -w GO111MODULEon1.5、验证安装/配置 1.…...

ES _bulk 批量操作用法

es 的 bulk 操作&#xff0c;是用来批量发送请求&#xff0c;或者理解为批量操作的。 支持4种操作 bulk 支持多种操作&#xff0c;如下create、index、update、delete。 create 如果文档不存在就创建&#xff0c;但如果文档存在就返回错误index 如果文档不存在就创建&#x…...

LCR 176.判断是否为平衡二叉树

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 176. 判断是否为平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 若树中任意节点左子树是平衡二叉树&#xff0c;右子树是平衡二叉树 且该节点左右子树平衡&#xff0c;则该树…...

跨境商城源码有哪些独特的功能和优势

1. 强大的跨境支付功能 跨境商城源码具备强大的跨境支付功能&#xff0c;支持多种支付方式&#xff0c;包括信用卡、支付宝、微信支付等。该功能遵循国际支付标准&#xff0c;能够确保支付过程的安全性和可靠性&#xff0c;为用户提供便捷的跨境购物体验。 2. 多语言和多货币支…...

latex如何对.pdf格式的图片实现裁剪

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在使用draw.io进行绘图&#xff0c;导出的时候不知道为什么周围会有留白&#xff0c;比如下图&#xff1a; 在导入latex的时候&#xff0c;会因为两侧的留白导致整张图片缩小。 如果直接进行裁剪.pdf&a…...

windows10下 iperf3测试带宽

iperf3下载网址&#xff1a;iPerf - Download iPerf3 and original iPerf pre-compiled binaries 可以用来测试TCP以及UDP带宽质量 通俗来说是用来测试网速的 准备&#xff1a;两台设备 1. 根据自己的设备选择下载工具&#xff08;两台都要有&#xff0c;这里我用的Window…...

强化学习在推测执行漏洞挖掘中的应用与实践

1. 推测执行漏洞与安全挑战现代处理器中的推测执行技术通过预测分支路径提前执行指令&#xff0c;大幅提升了指令级并行性。当处理器遇到条件分支时&#xff0c;它会根据历史记录预测分支走向&#xff0c;并提前执行预测路径上的指令。如果预测正确&#xff0c;可以节省约10-15…...

物联网隐私工程:从数据生命周期到安全设计实践

1. 物联网隐私困境&#xff1a;一个被误解的工程问题每次和同行聊起物联网项目&#xff0c;大家最头疼的往往是协议选型、功耗优化或者成本控制。至于隐私&#xff1f;那通常是产品经理或者法务部门在项目后期才想起来要填的“合规表格”。我自己在早期做智能家居网关时也犯过同…...

PipeANN:基于SSD的十亿级向量检索系统设计与实战

1. 项目概述&#xff1a;PipeANN&#xff0c;一个为SSD而生的向量检索系统如果你正在处理十亿级别的向量数据&#xff0c;并且对检索延迟和内存消耗感到头疼&#xff0c;那么PipeANN这个名字你应该记住。这是一个来自学术界的开源项目&#xff0c;但它解决的问题非常实际&#…...

基于Go与K8s Client-go实现多租户应用一键部署API服务

1. 项目概述与核心价值最近在搞一个内部工具平台&#xff0c;需要为每个新入职的同事快速部署一套独立的 Copaw 应用实例。Copaw 是我们团队基于agentscope/copaw镜像开发的一个内部辅助工具&#xff0c;每个开发者都需要一个专属的运行环境来处理自己的任务。手动去 K8s 里敲k…...

暗黑破坏神4 2026.5.13最新破解版免费下载 (速下 随时失效)手机电脑版通用

下载链接 圣休亚瑞的暗影演进&#xff1a;探析《暗黑破坏神4》的设计、玩法与竞争格局 作为动作角色扮演游戏&#xff08;ARPG&#xff09;领域的常青树&#xff0c;暴雪娱乐&#xff08;Blizzard Entertainment&#xff09;开发的《暗黑破坏神4》&#xff08;以下简称D4&…...

S32K3 FlexCAN实战:从MCAL配置到DMA接收,手把手教你避开那些手册里没写的坑

S32K3 FlexCAN深度实战&#xff1a;从寄存器配置到DMA优化全链路解析 在车载电子架构快速迭代的今天&#xff0c;S32K3系列MCU凭借其强大的FlexCAN模块成为汽车电子开发者的首选。但官方文档往往只勾勒出理想状态下的功能框架&#xff0c;当工程师真正着手实现CAN FD通信时&…...

基于MCP协议构建AI助手与外部应用桥接:以hikerapi-mcp为例的实战指南

1. 项目概述与核心价值最近在折腾一些自动化工作流&#xff0c;发现很多工具之间的数据流转是个大问题。比如&#xff0c;我想把某个文档里的关键信息提取出来&#xff0c;自动生成一个任务列表&#xff0c;再推送到另一个项目管理工具里。这个过程如果手动操作&#xff0c;不仅…...

3分钟掌握:如何在Windows电脑上直接运行安卓应用?APK安装器终极指南

3分钟掌握&#xff1a;如何在Windows电脑上直接运行安卓应用&#xff1f;APK安装器终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接安装…...

好用的四川企业用工风险咨询生产厂家

行业痛点分析在四川企业用工风险咨询领域&#xff0c;企业面临诸多技术挑战。首先&#xff0c;许多企业虽意识到用工风险的存在&#xff0c;但却不清楚风险具体所在。测试显示&#xff0c;超过七成企业未系统排查过自身用工风险&#xff0c;社保未足额缴纳、合同存在漏洞、规章…...

README智能生成工具:从项目分析到自动化文档的工程实践

1. 项目概述&#xff1a;一个为README注入灵魂的智能工具在开源社区和日常开发中&#xff0c;README文件的重要性不言而喻。它不仅是项目的门面&#xff0c;更是连接开发者与用户、贡献者之间的第一座桥梁。然而&#xff0c;有多少次&#xff0c;我们面对一个功能强大但文档寥寥…...