第七章 查找 七、红黑树

news2024/11/25 4:28:23

一、为什么要发明红黑树

因为:

平衡二叉树AVL:插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整。

平衡二叉树:适用于以查为主、很少插入/删除的场景。

而且:

红黑树RBT:插入/删除很多时候不会破坏“红黑”特性,无需频繁调整树的形态。即便需要调整,一般都可以在常数级时间内完成。

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

所以:

要发明红黑树

二、定义

1、红黑树是二叉排序树:

左子树结点值 > 根结点值 > 右子树结点值 

2、与普通BST相比:

  1. 每个结点或是红色,或是黑色的②根节点是黑色的
  2. 叶结点(外部结点、NULL结点、失败结点)均是黑色的
  3. 不存在两个相邻的红结点(即红结点的父节点和孩子结点均是黑色)
  4. 对每个结点,从该节点到任一叶结点的简单路径上,所含黑结点的数目相同

3、性质1

从根节点到叶结点的最长路径不大于最短路径的2倍

4、性质2

有n个内部节点的红黑树高度h<=\log_{2}(n+1)

5、红黑树查找操作时间复杂度

O(\log_{2}n)

三、红黑树的查找

四、红黑树的插入

五、红黑树的删除

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

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

相关文章

Ubuntu配置深度学习环境(TensorFlow和pyTorch)

文章目录 一、CUDA安装1.1 安装显卡驱动1.2 CUDA安装1.3 安装cuDNN 二、Anaconda安装三、安装TensorFlow和pyTorch3.1 安装pyTorch3.2 安装TensorFlow2 四、安装pyCharm4.1 pyCharm的安装4.2 关联anaconda的Python解释器 五、VScode配置anaconda的Python虚拟环境 前言&#xff…

使用sqlmap的 ua注入

文章目录 1.使用sqlmap自带UA头的检测2.使用sqlmap随机提供的UA头3.使用自己写的UA头4.调整level检测 测试环境&#xff1a;bWAPP SQL Injection - Stored (User-Agent) 1.使用sqlmap自带UA头的检测 python sqlmap.py -u http://127.0.0.1:9004/sqli_17.php --cookie“BEEFHOO…

C语言 —— 函数

目录 1. 函数是什么 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数(实参) 3.2 形式参数(形参) 4. 函数的调用 4.1 传值调用 4.2 传址调用 5. 函数的嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 6. 函数的声明和定义 6.1函数声明…

GEO生信数据挖掘(四)数据清洗(离群值处理、低表达基因、归一化、log2处理)

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 离群值处理 删除 低表达基因 函数归一化&#xff0c;矫正差异 数据标准化—log2处理 完整代码 上节围绕着探针ID和基因名称做了一些清洗工作&#xff0c;还做了重复值检查…

Elasticsearch基础篇(三):Elasticsearch7.x的集群部署

Elasticsearch的集群部署 1. Elasticsearch集群架构主节点数据节点客户端节点分片节点间通信集群状态 2. Elasticsearch集群部署2.1 系统配置修改2.1.1 修改文件句柄数和线程数2.1.2 修改虚拟内存2.1.3 关闭交换空间&#xff08;Swap&#xff09; 2.2 下载es数据库并上传到服务…

企业部署,springboot+vue+vue,Linux上部署mysql与redis,docker中部署nginx,jenkins。完整详细。

企业项目部署全流程笔记 前言 涉及&#xff1a;Linux服务器&#xff0c;docker&#xff0c;Jenkins&#xff0c;nginx&#xff0c;springoot&#xff0c;vue&#xff0c;mysql&#xff0c;redis&#xff0c;git&#xff0c; docker生成容器类型&#xff1a;MySql&#xff0c…

5G消息发展的前景与挑战

随着5G技术的快速发展和普及&#xff0c;5G消息正逐渐成为全球通信领域的新焦点。 随着5G技术的快速发展和普及&#xff0c;5G消息正逐渐成为全球通信领域的新焦点。 5G消息发展呈现规模化、产业化趋势 自2020年4月国内三大运营商联合发布5G消息白皮书以来&#xff0c;已经过…

Ubuntu20.04.1编译qt6.5.3版mysql驱动

下载qtbase6.5.3源码&#xff0c;将plugin中sqldrivers源码拷至于项目工程中&#xff0c;使用qtcreator打开文件 1、下载mysql开发库 sudo apt-get update sudo apt-get install build-essential libmysqlclient-dev 2、在msyql子目录中CMakeLists.txt第一行添加头文件、引…

面试必考精华版Leetcode236. 二叉树的最近公共祖先

题目&#xff1a; 代码(首刷看解析 10.1&#xff09;&#xff1a; class Solution { public:TreeNode* ansnullptr;bool FindSon(TreeNode* root,TreeNode* p,TreeNode* q){if(root nullptr) return false;bool lson FindSon(root->left,p,q);bool rson FindSon(root-&…

力扣 -- 712. 两个字符串的最小ASCII删除和

解题过程&#xff1a; 参考代码&#xff1a; class Solution { public:int minimumDeleteSum(string s1, string s2) {int ms1.size();int ns2.size();//求两个字符串的总ASCII和int sum0;for(const auto& e:s1){sume;}for(const auto& e:s2){sume;}//多开一行&#x…

数据结构与算法-(6)---栈的应用-(2)进制转换

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

基于STM32设计的智能化钻杆系统(华为云IOT)

一、项目引言 在现代石油、天然气等资源勘探和开采过程中,钻井是一项关键的工艺。为了提高钻井作业的准确性和效率,我们设计了一种基于STM32的智能化钻杆系统。该系统利用先进的控制和通信技术,实现了远程控制管子的转动和移动角度,并通过管子设备端的OLED显示屏显示接收到…

Docker从认识到实践再到底层原理(八)|Docker网络

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

WiFi网络分析工具Airtool for Mac

Airtool是一款Mac平台上的WiFi网络分析工具&#xff0c;它可以帮助用户监测、分析和管理无线网络。 以下是Airtool的一些主要功能和特点&#xff1a; 实时监测&#xff1a;Airtool可以实时监测当前Mac设备所连接的WiFi网络&#xff0c;包括网络速度、信号强度、连接状态等。信…

Linux CentOS7 vim重复行

在用vim编辑处理文件时&#xff0c;会有重复行。有的是情境需要&#xff0c;有的可能是误操作而形成。对于正常形成的重复行&#xff0c;我们不作讨论&#xff0c;我们仅讨论什么情况下会出现重复行&#xff0c;如何避免&#xff0c;如何处理。 在文件中的单行或多个连续空白行…

Docker从认识到实践再到底层原理(九)|Docker Compose 容器编排

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

每日一练-Q1-大数加法-20231001

目录 1.题目描述 2.输入描述 3.示例提示 4.问题分析 5.通过代码 1.题目描述 大数一直是一个c语言的一个难题。 现在我们需要你手动模拟出大数加法过程。 请你给出两个大整数加法结果。 2.输入描述 第一行输入整数n&#xff0c;第二行输入整数m。 (1<number<1e100)…

Leetcode 224. 基本计算器

文章目录 题目代码&#xff08;10.1 首刷看解析&#xff09; 题目 Leetcode 224. 基本计算器 代码&#xff08;10.1 首刷看解析&#xff09; class Solution { public:int calculate(string s) {stack<int> sk; // 存储正负号sk.push(1);int sign 1;int res 0;int i…

优维低代码实践:应用级配置

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

【Vue】Vuex详解,一文读懂并使用Vuex

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…