红黑树的定义和性质以及插入、删除操作

1.红黑树发明的原因

分析二叉排序树,平衡二叉树,红黑树的算法效率:

BSTAVL TreeRed-Black Tree
时间196019621972
时间复杂度(增删查) O ( n ) O(n) O(n) O ( l o g 2 n ) O(log_2n) O(log2n) O ( l o g 2 n ) O(log_2n) O(log2n)

1.平衡二叉树AVL的缺点

插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。

如:插入操作导致不平衡,则需要先计算平衡因子,
找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整。

2.引入红黑树优化平衡二叉树

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

3.红黑树和平衡二叉树的选择

  • 平衡二叉树:适用于以查为主、很少插入/删除的场景
  • 红黑树:适用于频繁插入、删除的场景,实用性更强

2.红黑树的定义

红黑树是二叉排序树:左子树结点值≤根结点值≤右子树结点值。

1.红黑规则

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

例如:
在这里插入图片描述
记忆口诀:“左根右,根叶黑,不红红,黑路同”。

2.结点数据结构设计

struct RBnode {//红黑树的结点定义int key ;//关键字的值RBnode* parent;//父节点指针RBnode* lchild;//左孩子指针RBnode* rChild;//右孩子指针int color;//结点颜色,如:可用0/1表示黑/红,也可使用枚举型enum表示颜色
};

3.结点的黑高

结点的黑高bh :从某结点出发(不含该结点)到达任一空叶结点的路径上黑结点总数。

1.问:根节点黑高为h的红黑树,内部结点数(关键字)至少有多少个 ?

答:内部结点数最少的情况――总共h层黑结点的满树形态.
若根节点黑高为h,内部结点数(关键字)最少有 2 h 2^h 2h个。

例如:
在这里插入图片描述

4.叶结点

在RBT中,“叶结点”通常指“失败结点”
(又名:空叶结点/NULL结点/外部结点)。

3.红黑树的性质

  • 性质1:从根节点到叶结点的最长路径不大于最短路径的2倍
    证明:任何一条查找失败路径上黑结点数量都相同,而路径上不能连续出现两个红结点,即红结点只能穿插在各个黑结点中间。
  • 性质2:有n个内部节点的红黑树高度h ≤ 2 l o g 2 ( n + 1 ) log_2(n+1) log2(n+1)
    若红黑树总高度=h,)则根节点黑高≥ h 2 \frac{h}{2} 2h,因此内部结点数n>= 2 h − 1 2^h-1 2h1,由此推出h ≤ 2 l o g 2 ( n + 1 ) log_2(n+1) log2(n+1)

1.时间复杂度

由性质2可以推出,红黑树查找操作时间复杂度=O( l o g 2 n log_2n log2n)。

2.红黑树的查找

与BST、AVL 相同,从根出发,左小右大,
若查找到一个空叶节点,则查找失败。

4.红黑树的插入

1.插入的策略

  1. 先查找,确定插入位置(原理同二叉排序树),插入新结点
  2. 新结点是根:染为黑色
  3. 新结点非根:染为红色
  4. 若插入新结点后依然满足红黑树定义,则插入结束。
  5. 若插入新结点后不满足红黑树定义,需要调整(根据叔叔结点的颜色),使其重新满足红黑树定义。

调整规则:

1 . 黑叔:旋转+染色

  • LL型:右单旋,父换爷+染色
  • RR型:左单旋,父换爷+染色
  • LR型:左、右双旋,儿换爷+染色
  • RL型:右、左双旋,儿换爷+染色

2 . 红叔:染色+变新

  • 叔父爷染色,爷变为新结点
    例如:当插入元素30时的操作
    在这里插入图片描述

5.红黑树的删除

1.考点

  • ①红黑树删除操作的时间复杂度= O ( l o g 2 n ) O(log_2n) O(log2n)
  • ②在红黑树中删除结点的处理方式和“二叉排序树的删除”一样
  • ③按②删除结点后,可能破坏“红黑树特性”,此时需要调整结点颜色、位置,使其再次满足“红黑树特性”。

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

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

相关文章

激光雷达录制pcap类型的包

查看IP 上图中的eno1就是网卡名,就可以使用如下命令录制 sudo tcpdump -i eno1 host 192.168.1.200 -w lidar.pcap-i 后面是网卡名,host 后面是ip,-w后是pcap包名称。

Ubuntu 22.04安装过程

iso下载地址 Ubuntu Releases 1.进入引导菜单 选择Try or Install Ubuntu Server安装 2.选择安装语言 默认选择English 3.选择键盘布局 默认即可 4.选择安装服务器版本 最小化安装 5.配置网络 选择ipv4 选择自定义 DHCP也可 6.配置代理 有需要可以配置 这里跳过 7.软件源 …

群晖 Docker版qbittorrent 下载显示错误 解决方法

这些天在折腾AIO玩,PVE虚拟机底层,核显直通,群晖安装,免不了踩些坑。 今天写篇博客,讲述一下群晖 Docker版qbittorrent 下载显示错误的解决方法,顺便记录一下配置,以便日后折腾可以参考。 直接…

几个国内可用的强大的GPT工具

前言: 人工智能发布至今,过去了九个多月,已经成为了我们不管是工作还是生活中一个重要的辅助工具,大大提升了效率,作为一个人工智能的自然语言处理工具,它给各大行业的提供了一个巨大的生产工具&#xff0c…

机器学习算法基础--逻辑回归

目录 1.数据收集及处理 2.数据提取及可视化 3.逻辑回归训练样本并且测试 4.绘制散点决策边界 逻辑回归的方法已经在数学建模里面讲过了,这里就不多讲了。 本篇我们主要是利用逻辑回归的方法来求解分类问题。 1.数据获取及处理 import pandas as pd from sklearn…

【深度学习框架格式转化】【CPU】Pytorch模型转ONNX模型格式流程详解【入门】

【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】前言PyTorch模型环境搭建(CPU)安装onn…

中国汽车供应商远赴德国,中国智驾方案能否远渡重洋?

作者|Amy 编辑|德新 今年的上海车展,中国智能汽车的进步有目共睹,吸引了大批外企高管和研发人员的关注,甚至引发了海外车企一系列的动作和调整。 而在刚刚结束的慕尼黑车展,中国车企及汽车供应链把「肌肉」秀到了现代汽车起源地…

大模型如何赋能智能客服

2022年,大模型技术的出色表现让人们瞩目。随着深度学习和大数据技术的发展,大模型在很多领域的应用已经成为可能。许多公司开始探索如何将大模型技术应用于自己的业务中,智能客服也不例外。 智能客服是现代企业中非常重要的一部分&#xff0…

Python 图形化界面基础篇:创建工具栏

Python 图形化界面基础篇:创建工具栏 引言 Tkinter 库简介步骤1:导入 Tkinter 模块步骤2:创建 Tkinter 窗口步骤3:创建工具栏步骤4:向工具栏添加工具按钮步骤5:处理工具按钮的点击事件步骤6:启动…

基于matlab实现的卡尔曼滤波匀加速直线运动仿真

完整程序: clear clc %% 初始化参数 delta_t 0.1; %采样时间 T 8; %总运行时长 t 0:delta_t:T; %时间序列 N length(t); %序列的长度 x0 0; %初始位置 u0 0; %初速度 U 10; %控制量、加速度 F [1 delta_t 0 1]; %状态转移矩阵 B …

【c#-Nuget 包“在此源中不可用”】 Nuget package “Not available in this source“

标题c#-Nuget 包“在此源中不可用”…但 VS 仍然知道它吗? (c# - Nuget package “Not available in this source”… but VS still knows about it?) 听起来您的公司有一个发布包的内部 NuGet feed,而不是公共 NuGet.org feed。您应该向您的同事询问…

CentOS 7 安装踩坑

CentOS与Ubuntu并称为Linux最著名的两个发行版,但由于笔者主要从事深度学习图像算法工作,Ubuntu作为谷歌和多数依赖库的亲儿子占据着最高生态位。但最近接手的一个项目里,甲方指定需要在CentOS7上运行项目代码,笔者被迫小小cos了一…

在华为云服务器上CentOS 7安装单机版Redis

https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉,点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…

【二叉树】的顺序存储(堆的实现)

📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

64位Ubuntu20.04.5 LTS系统安装32位运行库

背景: 在ubutu(版本为20.04.5 LTS)中运行./arm-none-linux-gnueabi-gcc -v 后提示“no such device”。 经多方查证,是ubutu的版本是64位的,而需要运行的编译工具链是32位的,因此会不兼容。 解决方法就是在…

十分钟理解OSPF路由协议

十分钟理解OSPF路由协议 1.RIP的缺陷以跳数为度量值最大跳数为15更新路由表采用全更新收敛速度慢 2.RIP与OSPF比较OSPF概述运行OSPF协议之前运行OSPF协议之后 3.OSPF协议工作过程1.发现邻居2.建立邻接关系3.传递链路状态信息4.计算路由 4.OSPF分区域管理 有RIP协议,…

Bootstrap 框架学习笔记(基础)

来自于 Twitter,基于 HTML、CSS、JavaScript。 有关网站:Bootstrap中文网Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。目前,Bootstrap最…

Java Semaphore使用例子和流程

目录 Semaphore例子代码和输出semaphore.acquire();semaphore.release(); Semaphore semaphore : 英[ˈseməfɔː(r)] 美[ˈseməfɔːr] n. 旗语; 信号标; v. 打旗语; (用其他类似的信号系统)发信号; [例句]Semaphore was widely used at sea, before the advent of electr…

ssh登录时间久或登陆后报错

情况1 问题描述: ssh登录时间很久,登录后出现abrt-cli status timed out 的报错 问题原因: .lock文件被锁导致 执行systemctl status abrtd.service可以看到被锁的.lock 处理方式: ps -ef | grep pid 找到被锁的进程kill掉…

图片格式大全

青春不能回头,青春也没有终点。 大全介绍 图片格式有多种,每种格式都有其独特的特性和用途。以下是一些常见的图片格式以及它们的介绍: JPEG(Joint Photographic Experts Group): 文件扩展名:…