[温故] 红黑树算法

前言

最近在突然想起一些基础的东西, 向着温故知新, 有了些新的感悟和大家分享一下.

排序算法是数据结构的一个重要组成部分, 当时学习的时候没有少折腾, 这里来看看大佬们怎么运用这些数据结构来构建庞大的计算机体系的.

二叉树是排序算法的一个衍生, 基于二叉树的构建不同, 有完全树, RB树, B+树等.

我们把一颗有序的树压平, 其实就是一个队列.

为啥要有二叉树呢, 其实要从二分查找说起, 我们在二分查找的时候, 很快遍历到我们想要的结果.

我们回忆一下, 二分是怎么二分的, 我们要先知道队列的总数, 然后查看其二分之一长度的元素值和我们目标数字的大小, 小的在左边, 大的在右边.

这种二分查找法和完全二叉树有异曲同工之妙. 而且完全二叉树不需要知道队列的总长度, 根据节点的左右节点的信息就可以递归找到目标节点. 而且相比队列, 二叉树的增删维护要方便很多, 不用大面积的移动内存, 只需要简单的修改链表节点信息即可.

今天我温故了红黑树, 好像和书上讲的不一样, 也不晓得正确不, 不过要简单一些, 所以分享出来, 下面是我的理解:

红黑树算法

增: 注意两红相遇, 上红变黑, 旁支为红变黑, 旁支为黑就转向, 直到不冲突为止.

删: 找到左边最大的值, 替换当前节点, 转换为删叶子节点, 如果替换的叶子节点是黑就需要进行修正.
删除叶子节点的修正方法: 上变黑, 旁变红, 两红相遇就上移旁红, 继续旁边红, 直到旁边不冲突为止.
在这里插入图片描述
删9: 找到左边最大8替换, 8是黑色,需要修正: 8的子树不平衡, 将左10红, 上面的11黑,15红, (遇13,17红), 15上行,17黑.
在这里插入图片描述

参考:

  • TreeMap_implementing_RBTree_python

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

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

相关文章

C语言--2048小游戏

需要用到EasyX图形库 #include <stdio.h> #include <stdlib.h> #include <time.h> #include<assert.h> #include <conio.h> #include <windows.h> #include<graphics.h> #include<string.h> #define ROW 4 /* 行数 */ #defin…

Rust面试宝典第2题:逆序输出整数

题目 写一个方法&#xff0c;将一个整数逆序打印输出到控制台。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如&#xff1a;123的逆序输出为321&#xff0c;8600的逆序输出为68&#xff0c;-609的逆序输出为-906。 解析 这道题本身并没有什么…

供应NVP6324芯片现货

长期供应各品牌芯片现货&#xff1a; NVP6324 NVP2443I IMX290LQR-C FS32K118LFT0MLHT FS32K146UAT0VLLT FS32K146UAT0VLQT FS32K142HFT0MLHT FS32K142HRT0VLLT FS32K142HAT0MLLT FS32K142HRT0VLHT FS32K142HFT0VLHT FS32K144HFT0MLLT FS32K144HAT0VLHT FS32K144…

PostgreSQL入门到实战-第二十一弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(五)官网地址PostgreSQL概述PostgreSQL中RIGHT JOIN命令理论PostgreSQL中RIGHT JOIN命令实战更新计划 PostgreSQL中表连接操作(五) 使用PostgreSQL RIGHT JOIN连接两个表&#xff0c;并从右表返回行 官网地址 声明: 由于操作系统…

打印机共享设置助手

工作中经常设置共享打印机&#xff0c;为简化操作编写了此打印机设置助手运行环境&#xff1a; 支持Windows 7以上系统直接运行Windows 7 使用PrinterTool_NET20版本Windows 10以上 使用PrinterTool_NET452版本 软件功能&#xff1a; 设置默认打印机设置共享打印机快捷连接共…

Scanner类的使用步骤

1.导包 import java.util.Scanner; 注意事项&#xff1a; 导包的动作必须出现在类定义的上边。 2.创建对象 Scanner sc new Scanner(System.in); 上面这个格式里面,只有sc是变量名&#xff0c;可以变&#xff0c;其他的都不允许改变。 3.接收数据 int i sc.nextInt();Sys…

微软Office吊打WPS ?不一定,WPS未来被它“拿捏”了

微软Office Plus吊打WPS Office&#xff1f; 微软的Office套件在全球范围内内享有盛誉&#xff0c;其强大的功能和广泛的应用场景使其在办公、娱乐乃至生活的各个角落都显得不可或缺。 而与之相对&#xff0c;WPS Office作为国内办公软件的佼佼者&#xff0c;与微软的较量已历…

探新路建“枢纽” 湖南深耕中非经贸合作“试验田”

湖南作为中国与非洲经贸合作的重要窗口&#xff0c;积极推动中非经贸关系的发展和深化。通过构建覆盖全产业链的高效运作模式&#xff0c;湖南企业能够在一周内将肯尼亚干制鳀鱼加工成为麻辣鲜香的劲仔深海小鱼并投入中国市场。此外&#xff0c;湖南还致力于推动非洲优质农产品…

gitee和idea集成

1 集成插件 2 配置账号密码 3 直接将项目传到仓库 4直接从gitee下载项目

题目:斤斤计较得小Z(蓝桥OJ 2047)

问题描述&#xff1a; 题解&#xff1a; 做法一&#xff08;kmp模板&#xff09;&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e6 9; char s[N], p[N]; int nex[N];int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);// p: 子…

Stable Diffusion——SDXL Turbo让 AI 出图速度提高10倍

摘要 在本研究中&#xff0c;我们提出了一种名为对抗扩散蒸馏&#xff08;ADD&#xff09;的创新训练技术&#xff0c;它能够在1至4步的采样过程中&#xff0c;高效地对大规模基础图像扩散模型进行处理&#xff0c;同时保持图像的高质量。该方法巧妙地结合了分数蒸馏技术&…

记录linux从0部署java项目(宝塔)

目录 一、安装宝塔可视化界面 二、部署前端 三、部署后端 1、配置并连接Mysql数据库 2、配置并连接redis 3、安装jdk 这里先记录一个安装后遇到的问题 安装openJDK 四、检查 一、安装宝塔可视化界面 宝塔面板下载&#xff0c;免费全能的服务器运维软件 运行安装脚本 安…

【爬虫开发】爬虫从0到1全知识md笔记第5篇:Selenium课程概要,selenium的其它使用方法【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…

【JAVA基础篇教学】第一篇:Java基础数据类型

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第一篇&#xff1a; Java基础数据类型。 在Java中&#xff0c;数据类型是用来指定变量存储数据的类型。Java的数据类型可以分为两大类&#xff1a;原始数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型…

第六节 LLAVA模型CLI推理源码解读(多轮对话推理方式与原理(prompt与assistant))

文章目录 前言一、CLI推理实现1、推理运行方法2、cli推理结果显示二、推理模型加载三、选择模板1、模板选择2、conv_llava_v1内容2、Conversation类简单介绍四、获得roles五、推理模型图像加载方式六、推理模型文本加载方式1、输入文本获得2、messages添加prompt3、模型prompt获…

黄金基金和黄金有什么区别?

黄金基金本质上是一种投资工具&#xff0c;它通过间接投资黄金或与其紧密相关的金融衍生品来反映黄金市场的表现。不同于直接持有实物黄金&#xff0c;投资者购买黄金基金并不涉及实体黄金的保管问题&#xff0c;而是将资金交由专业的基金管理人管理&#xff0c;由他们代表投资…

流程图的新语法-mermaid的快速使用--推荐

chatgpt或者现在的大数据采用的流程图给出的代码如下&#xff1a; graph TD;A[接收客户请求] --> B[问题分类];B --> C[技术支持];B --> D[维修服务];C --> E[远程解决];C --> F[现场支持];D --> G[维修完成];G --> H[服务反馈];style A fill:#f9f,strok…

Linux C++ 022-函数模板

Linux C 022-函数模板 本节关键字&#xff1a;Linux、C、函数模板、泛型编程 相关库函数&#xff1a; 函数模板的用法 C另一种编程思想称为泛型编程&#xff0c;主要利用的技术就是模板&#xff0c;C提供两种模板机制&#xff1a;函数模板和类模板函数模板的作用&#xff1a…

IO流(字节流、字符流)

一、IO概述 1&#xff0e;什么是IO流? 存储和读取数据的解决方案l: inputo: output流∶像水流一样传输数据 2.IO流的作用? 用于读写数据&#xff08;本地文件&#xff0c;网络) 3.IO流按照流向可以分类哪两种流? 输出流:程序 - > 文件 输入流:文件 - > 程…

【解决】安装模块时报错:ERROR: *.whl is not a valid wheel filename.

其实错误信息已经告诉你了&#xff0c;就是你的文件名有问题。在你下载whl文件时一定要注意原文件的文件名&#xff0c;不要改动文件名。 以我安装pandas模块为例吧。 在我下载whl文件时&#xff0c;因为网速太慢&#xff0c;我就下载了多次&#xff0c;导致文件名变成了这个…