红黑树(AVL树的优化)上

红黑树略胜AVL树

AVL树是一颗高度平衡搜索二叉树: 要求左右高度差不超过1(严格平衡)

有的大佬认为AVL树太过严格,对平衡的要求越严格,会带来更多的旋转(旋转也还是会有一定的消耗!!)

红黑树的出发点:最长路径不超过最短路径的2倍(近似平衡)

相对而言,插入同样的数据,AVL树旋转更多,红黑树旋转更少(这是优势)

红黑树的劣势:

 我们在进行查找的时候,我们AVL树最多查找20次左右

红黑树最多查找40次左右

虽然红黑树查找的次数比AVL树多,但是红黑树在插入过程中的旋转更少,更占优势

红黑树的概念

红黑树,是一种搜索二叉树,单在每个节点上增加一个存储位表示节点的颜色,可以是Red或Block,通过对任何一条从根到路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因而是接近平衡的

1.每一个节点不是红色就是黑色

2.根节点是黑色的

3.如果一个节点是红的,那么它的两个孩子节点是黑色的

解读  :   树中没有连续的红色节点

4.对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含有相同的数目的黑色节点

解读  : 每条路径的黑色节点数量相等

 5.每个叶子节点都是黑色的(此处的叶子节点指的是空节点NIL节点)

为什么这里指的是空节点呢??

 为什么满足上面性质,红黑树就能保证 : 其最长路径中节点个数不会超过最短路径节点个数的两倍??

因为每条路径上都有相同数量的黑节点  所以:

这颗树最短路径  :  一定是全黑

           最长路径  :  一定是一黑一红

这样最短路径一定不超过最长路径的二倍

红黑实现代码

我们在新插入的节点是应该选择红色还是黑色呢??

 我们来看看插入红色,会是什么样??

发现如果插入黑色一定挨打,如果插入红色有可能不用挨打,拍拍屁股就走人了,就算是挨打,也不用太大费周章的解决

 叔叔也是红的,那我把叔叔也变黑,祖父变红

 如果这时候  25就是这颗树的根,就结束了,没必要在往后走了(再像办法把25变为黑的)

 

 这时候我们发现还有一个小问题,grandfather变成红了,但是grandfather这时候是根,根不能是红的,我们还得把grandfather变成黑,即可

我们上面的过程,红黑树的插入问题可能光变色就够了,插入节点之后最短并没有超过最长的2倍,也不需要旋转,降长度

------------------------------------------------------------------------------------------------------------------

一下这种情况就需要旋转加变色了

 ------------------------------------------------------------------------------------------------------------------------------

情况一 : cur为红,p为红,g为黑,u存在且为红

 具像图一:

 具像图二:

 总共有  4*4*4*4(在ab的任意位置插入,有4种情况) =256 种组合

这些情况是无穷无尽的!!!

有可能 a b下面还有一个黑节点,那么cde的子树就是有两个黑节点的子树了,情况是无穷无尽的了

---------------------------------------------------------------------------------------------------------------------------

情况二  :   还有的情况是光变色解决不了的!!!!

cur为红,p为红 , g为黑,u不存在  /   u存在且为黑

 

 

情况三:就是情况二再变形

双旋 + 变色

 情况一变过来之后,我们看叔叔的情况!!!

 

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

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

相关文章

WordPress使用子主题插件 Child Theme Wizard,即使主题升级也能够保留以前主题样式

修改WordPress网站样式,主题升级会导致自己定义设置的网站样式丢失,还需要重新设置,很繁琐工作量大,发现在WordPress 中有Child Theme Wizard子主题插件,使用Child Theme Wizard子主题插件,即使主题升级&am…

2023年下半年西安/广州/深圳软考(中/高级)开班啦!!!

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成项…

智慧校园用电安全解决方案

随着科技的不断发展,智慧校园建设逐渐成为了教育行业的一大趋势。在这个过程中,电力系统作为校园基础设施的重要组成部分,其安全、稳定、高效的运行显得尤为重要。下面小编来为大家介绍下智慧校园用电安全解决方案吧! 一、智慧校园电力系统现…

抖店无货源和工厂直发有什么区别?聊下无货源的概念和做店思路

我是王路飞。 最近收到了几条私信,都是关于做抖店的,其中有一条吸引了我的兴趣。 他问的是:抖店的无货源和工厂直发有什么区别吗? 说实话,这个问题,我一开始是不打算回复的,因为没有意义。 …

C# task多线程创建,暂停,继续,结束使用

1、多线程任务创建 private void button1_Click(object sender, EventArgs e) //创建线程{CancellationToken cancellationToken tokensource.Token;Task.Run(() > //模拟耗时任务{for (int i 0; i < 100; i){if (cancellationToken.IsCancellationRequested){return;…

[C++ 网络协议] 多进程服务器端

具有代表性的并发服务器端实现模型和方法&#xff1a; 多进程服务器&#xff1a;通过创建多个进程提供服务。✔ 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务。 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务。 目录 1. 进程的概念及应用 1.…

CTFhub-文件上传-前端验证

burp 抓包 --> 重发--> 查看源代码 用 GodZilla 生成木马 文件名为 1.php.jsp 上传-->抓包-->改包 (删掉 .jpg) --> 点击 放行 木马文件位置为&#xff1a;http://challenge-f0531d0c27641130.sandbox.ctfhub.com:10800/upload/1.php 用 蚁剑连接 ctfhub{4743b…

数组中的第K个最大元素

题目链接 数组中的第K个最大元素 题目描述 注意点 需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素 解答思路 本题可以使用快速排序、堆排序或优先队列解决&#xff0c;快排可以比较快速找到某个元素在数组中排序后的位置&#xff0c;所以找…

Linux内核数据结构 散列表

1、散列表数据结构 在Linux内核中&#xff0c;散列表&#xff08;哈希表&#xff09;使用非常广泛。本文将对其数据结构和核心函数进行分析。和散列表相关的数据结构有两个&#xff1a;hlist_head 和 hlist_node //hash桶的头结点 struct hlist_head {struct hlist_node *first…

最简单vue获取当前地区天气--高德开放平台实现

目录 前言 一、注册成为高德平台开发者 二、注册天气key 1.点击首页右上角打开控制台 2.创建新应用 三、vue项目使用 1.打开vue项目找到public下的index.html&#xff0c;如果是vue3的话直接在主目录打开index.html文件就行&#xff0c;主要就是打开出口文件 ​编辑 2.根据高德…

HTTPS协议原理

目录 前言 1.理解加密和解密 2.为什么要加密 3.常见的加密方式 3.1对称加密 3.2非对称加密 4.数据摘要和数据指纹 5. 数字签名 6.HTTPS的加密策略 6.1只使用对称加密 6.2使用非对称加密 6.2.1服务端使用非对称加密 6.2.2双方都使用非对称加密 6.3对称加密非对称加…

OLED透明屏显示技术:未来显示科技的领航者

OLED透明屏显示技术是一种创新性的显示技术&#xff0c;它的特殊性质使其成为未来显示科技的领航者。 OLED透明屏具有高对比度、快速响应时间、广视角和低功耗等优势&#xff0c;同时&#xff0c;其透明度、柔性和薄型设计使其成为创新设计的理想选择。 本文将深入探讨OLED透…

【爬虫】5.6 Selenium等待HTML元素

任务目标 在浏览器加载网页的过程中&#xff0c;网页的有些元素时常会有延迟的现象&#xff0c;在HTML元素还没有准备好的情况下去操作这个HTML元素必然会出现错误&#xff0c;这个时候Selenium需要等待HTML元素。例如&#xff1a;上节实例中出现的select的下拉框元素&#xff…

Python实操GetOpenFilename打开文件选择框获取工作表信息

import xlwings as xw xlapp xw.App(visibleTrue, add_bookFalse) a xlapp.api.GetOpenFilename(Excel Files (*.xl*),*.xl*, 0, 0, 0, True) print(a[0]) slist [] for i in a:wk xw.Book(i)for s in wk.sheets:s_dict {}s_dict[工作簿名字] wk.names_dict[工作表名字] …

MyBatis学习简要

目录 什么是MyBatis? MyBatis实现的设想 MyBatis基于配置文件的开发步骤 mybatis的配置文件 Mapper代理开发 配置文件完成增删改查的三步 注解开发 一、条件查询 参数接收时&#xff0c;参数的设置&#xff1a; 动态条件查询&#xff1a; 二、添加功能 步骤&#xf…

crawlab通过docker单节点部署简单爬虫

crawlab 单节点docker安装 此处介绍的是单节点的方式&#xff0c;多节点的情况可以把爬虫上传到一个节点中&#xff0c;之后会同步到其它节点上 version: 3.3 services:master:image: crawlabteam/crawlabcontainer_name: crawlab_masterrestart: alwaysenvironment:CRAWLAB…

安卓系列机型永久去除data分区加密 详细步骤解析

安卓机型玩机搞机刷写第三方twrp存储出现乱码 存储不显示等情况都是没有解密data分区的原因。用户需要在twrp里格式化data分区重启后存储显示正常。那么这个操作后你的数据分区就会呗彻底清除。 今天主要解析下如何操作可以永久解密data分区。其实data分区加密原则上也是厂商为…

node升级带来的问题及解决方案(digital envelope routines::unsupported)

由于项目需要将 node版本从16升级到了18&#xff0c;但是原有的老项目还是使用的16的环境&#xff0c;导致在运行老版本的时候出现错误 错误信息如下 Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:71:19)at Object.…

SSD的基础知识介绍

固态硬盘&#xff0c;英文名Solid State Disk或Solid State Drive&#xff0c;是一种以存储器作为永久性存储器的电脑存储设备。虽然SSD已不是使用“碟盘”来记存数据&#xff0c;也没有用于“驱动”的马达&#xff0c;但是人们依照命名习惯&#xff0c;仍然称为固态硬盘或固态…

源码角度看待线程池的执行流程

文章目录 前言一、线程池的相关接口和实现类1.Executor接口2.ExecutorService接口3.AbstractExecutorService接口4.ThreadPoolExecutor 实现类 二、ThreadPoolExecutor源码解析1.Worker内部类2.execute()方法3.addWorker()方法 总结 前言 线程池内部维护了若干个线程&#xff…