数据结构 | 红黑树、平衡二叉树旋转、并查集

news2024/11/24 11:15:36

 

一、红黑树

 


 

 1.1、红黑树的定义(左根右,根叶黑,不红红,黑路同)

        前提,对于一棵二叉排序树(或者说二叉搜索树),如果满足以下定义则是红黑树:

        ①每个结点或是红色,或是黑色的。

        ②根结点是黑色的。

        ③叶结点 (虚构的外部结点、NULL结点) 都是黑色的。

        ④不存在两个相邻的红结点(即红结点的父结点和孩子结点均是黑色的)。

        ⑤对每个结点,从该结点到任一叶结点的简单路径上,所含黑结点的数量相同

        简记为:左根右(二叉排序树),根叶黑,不红红,黑路同(黑高相同) 

        黑高bh:从某结点出发(不包括)到达叶节点的任一简单路径上的黑结点总数 

 

        补充︰

        红黑树中任意一个叶结点的深度 = 从根开始到叶子结点的简单路径上,所含的红+黑结点数之和,又根据第⑤点,那任意两个叶节点的深度差就等于从根开始到这两个叶节点所经过的红色节点数之差,这就解释了为什么红黑树的结点平衡因子的绝对值有可能远大于1。

 


 

1.2、 红黑树与平衡二叉树的比较

        红黑树和平衡二叉树:都是特殊的二叉排序树,且都是自平衡的(即插入和删除时会根据定义自发的调整树而不需要人手动调整),树高都是O(logn)级别(树高可以认为和最坏情况下查找的时间是相等的),插入和删除复杂度都是O(logn)。 

        平衡二叉树:对于平衡的要求更高(即平衡因子只能是-1,0,1),树高一般比红黑树低

        插入和删除调整的次数更多,需要花费的时间更多。

        红黑树:的对于平衡的要求低一点,由红黑因子来限制(平衡因子的绝对值有可能大于1),一般树高也会高于平衡二叉树,但插入和删除操作花的时间更少

        时间复杂度:比如删除操作时间复杂度是O(logn),考试中可以看作所花时间为C*logn,那红黑树和平衡二叉树的删除复杂度相等都是O(logn),但红黑树所花时间更少,可以理解为他的常数C更小,请记住时间复杂度不是确定的数, 前面常数C的具体值是不确定的。

        

 


 

1.3、红黑树插入

         

 

  • 父子如果都是红色就会吵架出问题(不红红)
  • 新插入结点为红(根节点的话需要调整为黑)
  • 若父亲为黑不需要调整
  • 父亲为红时不满足红黑树性质,需要调整,两种情况
    • ①同辈(父和叔)有强有弱则同辈解决(按平衡二叉树规则旋转)
    • ②同辈势均力敌则交给长辈处理(都是红则把爷爷看作新节点上级去处理)
    • 要么旋转自己处理,要么交给长辈处理,且这两种情况都需要染色,根据是否需要交给长辈处理染色

         

 黑叔:

        

 红叔:

        

 


 

二、平衡二叉树旋转

 

 

 


 


 

三、并查集

 

 

  • 三要素
    • 逻辑结构 —— 集合
    • 初始化(所有数组元素初始化为-1)、查、并
    • 存储结构 —— 顺序存储,双亲表示法
  • 优化

 


内容参考于 —— 王道

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

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

相关文章

2022-12-15 工作记录--React-用swiper实现多行交错、同速、跑马灯效果的弹幕式轮播(坑)

React-用swiper实现多行交错、同速、跑马灯效果的弹幕式轮播&#xff08;坑&#xff09; 激动的心呀呀呀&#xff01;٩(๑>◡<๑)۶ 历时昨天一下午滴时间昨晚凌晨一点多&#x1f31b;还爬起来思考&#x1f914;这个问题&#xff08;眼睛一闭着&#x1f634;&#xff0c…

2471. 逐层排序二叉树所需的最少操作数目-层次遍历+选择排序

2471. 逐层排序二叉树所需的最少操作数目-层次遍历选择排序 给你一个 值互不相同 的二叉树的根节点 root 。 在一步操作中&#xff0c;你可以选择 同一层 上任意两个节点&#xff0c;交换这两个节点的值。 返回每一层按 严格递增顺序 排序所需的最少操作数目。 节点的 层数…

虚拟机的垃圾收集(一)

虚拟机就好比是一个有限空间的一个房子&#xff0c;在我们生活中&#xff0c;也会产生各种各样的垃圾&#xff0c;虚拟机也不例外&#xff0c;垃圾满了会造成内存溢出等问题&#xff0c;那虚拟机是怎么进行垃圾回收的呢?让我们来揭开这神秘的面纱 1.概述 程序计数器、虚拟机…

融一亿但被质疑的5ire为何大家有分歧

5ire是由印度裔企业家 Pratik Gauri 和 Prateek Dwivedi 以及 Web3 金融家 Vilma Mattila 于 2021 年 8 月创立的区块链项目&#xff0c;官方在2022年7月公布以15亿美元估值获得一亿美元融资&#xff0c;机构为英国企业集团 SRAM & MRAM Group &#xff0c;成为印度的第 10…

[附源码]Python计算机毕业设计高校教材管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

电影《海贼王:红发歌姬》观后感

上周&#xff0c;北京已经开始陆续解封了&#xff0c;电影院也可以进入了&#xff0c;只要持有48小时核算就行&#xff0c;于是去看了这部电影《海贼王&#xff1a;红发歌姬》&#xff0c;去看之前&#xff0c;看了预告片&#xff0c;讲述路飞小时候的玩伴乌塔&#xff0c;长大…

NLP创业破局,如何摘取更高处的果实

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入&#xff01;2022年&#xff0c;云从科技、商汤科技先后登陆资本市场&#xff0c;计算机视觉四小龙中的旷视科技、依图科技也在摩拳擦掌。反观NLP领域&#xff0c;相关企业的发展速度、融资规模、上市进程仿佛都要略逊一筹&…

java计算机毕业设计基于安卓Android的二手交易app-闲置物品交易app-ssm

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设…

数组 reduce 方法使用记录

概述 reduce()方法对数组中每个元素执行一次 reduce&#xff08;&#xff09;函数 —升序执行&#xff0c;将其结果汇总为单个返回值。 reduce方法可做的事情特别多&#xff0c;就是训话遍历能做的&#xff0c;reduce都可以做&#xff0c;比如&#xff1a;数组求和&#…

Vue基础快速入门

目录 1.vue基础 1.1vue项目创建 1.2 el挂载 1.3.data数据对象 2.本地应用 2.1.内容绑定&#xff0c;事件绑定 v-text ​v-html 传递自定义参数&#xff0c;事件修饰符 总结&#xff1a; 结合使用&#xff1a;计数器 2.2.显示切换&#xff0c;属性绑定 v-show v…

【笔记】计算机组成原理复习重点——篇一

计算机组成原理复习重点笔记 计算机组成原理计算机体系结构 学科基础必修课 研究生入学考试全国联考45分&#xff0c;占比30% 64学时&#xff0c;4学分&#xff0c;上课56&#xff0c;实验8 教材&#xff1a;计算机组成原理(第二版 ) 唐朔飞 高等教育出版社 目录&#xff08;已…

快速创建servlet(doGet和doPost)

目录 前言必读 一、概述 一、创建方式 1.在需要创建的包下进行创建 2.自定义类名--->类这里添加一个类名&#xff08;和上面的名称一样名字&#xff09; ------>勾选创建并确定 3.创建完成代码 4.删掉多余的 二、升级生成的模板 1.点击文件--设置里面 2.在编…

Simulink| “双碳”背景下汽车减少碳排放建模与仿真

目录 一、概述 二、模型 三、Simulink模型 四、matlab代码 一、概述 温室气体的过量排放会增强温室效应&#xff0c;造成全球极端气候的出现&#xff0c;严重影响人类的生存与发展&#xff0c;因此&#xff0c;控制温室气体减排已成为当前环保的重点。根据联合国政府间气…

Linux系统搭建redis-cluster集群案例

Linux系统搭建redis-cluster集群案例&#xff08;一&#xff09;redis下载及安装【1】前言介绍【2】redis下载以及安装&#xff08;1&#xff09;首先要进入Linux系统的根目录&#xff08;2&#xff09;安装redis所需的环境&#xff08;3&#xff09;下载redis源码包&#xff0…

k8s 中部署kafka集群

由于开发过程中使用到了kafka&#xff0c;又不想自己部署kafka&#xff0c;索性采用k8s 部署kafka集群&#xff0c;以求做到随时插拔。 创建命名空间 apiVersion: v1 kind: Namespace metadata:name: "kafka"labels:name: "kafka"sudo kubectl apply -f …

linux篇【12】:计算机网络——tcp

目录 一.TCP套接字接口 1.inet_aton &#xff08;和inet_addr一样&#xff0c;换一种方式而已&#xff09; 2.listen——把套接字设置为监听状态 3.服务器获取客户端的连接 accept 返回值中套接字和参数中套接字的作用&#xff1a; 4.用到的部分函数 &#xff08;1&…

技术分享 | MySQL 多版本并发控制「MVCC」

作者&#xff1a;贲绍华 爱可生研发中心工程师&#xff0c;负责项目的需求与维护工作。其他身份&#xff1a;柯基铲屎官。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 一、MySQL InnoD…

TaxiBGC ——分类学指导下的生物合成基因簇鉴定流程

谷禾健康 当前合成基因簇预测限制较大 微生物基因组中的生物合成基因簇 (BGC) 编码具有生物活性的次级代谢物 (SM)&#xff0c;它可以在微生物-微生物和宿主-微生物相互作用中发挥重要作用。 鉴于次级代谢物的生物学意义和当前对微生物组代谢功能的深刻兴趣&#xff0c;从高通…

通过 ffmpeg 串流对接 OBS 等直播软件

我们要将设备通过私有通道输出到 H264 流&#xff0c;传给 OBS 等直播软件使用。为此&#xff0c;设计了上图所示的串流工具。 设计思路 私有通道通过 API 接口提供 H264 流&#xff0c;要传给 ffmpeg &#xff0c;最简单的方法是通过进程间管道传输数据。这里 Dump 工具直接…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java美丽华驾校信息管理系统t93d7

毕业设计也不需要做多高端的程序&#xff0c;毕业设计对于大多数同学来说&#xff0c;为什么感觉到难&#xff0c;最重要的一个原因&#xff0c;那就是理论课到实践课的转变&#xff0c;很多人一下不适应&#xff0c;本能开始拒绝&#xff0c;如果是一个考试&#xff0c;大家都…