数据结构和算法-红黑树(定义 性质 查找 插入 删除)

文章目录

  • 红黑树的定义和性质
    • 为什么要发明红黑树?
    • 红黑树怎么考
    • 总览
    • 红黑树的定义
      • 实例:一颗红黑树
      • 练习:是否符合红黑树的要求
      • 一种可能的出题思路
      • 补充概念:节点黑高
    • 红黑树的性质
  • 红黑树的查找
  • 红黑树的插入
    • 实例
    • 小结
    • 与黑高相关的理论
  • 红黑树的删除

红黑树的定义和性质

为什么要发明红黑树?

插入和删除即一般不会破坏特性,并且即使破坏,恢复的代价比较低
在这里插入图片描述
在这里插入图片描述

红黑树怎么考

在这里插入图片描述

总览

在这里插入图片描述

红黑树的定义

叶节点不是我们认为的没有子树的节点了,是空节点,即我们所认识的叶子节点的孩子就是叶节点
在这里插入图片描述

实例:一颗红黑树

在这里插入图片描述

练习:是否符合红黑树的要求

在这里插入图片描述
在这里插入图片描述
将6变为红后
在这里插入图片描述
但此时7不满足二叉排序树,替换为11即可
在这里插入图片描述

一种可能的出题思路

在这里插入图片描述

补充概念:节点黑高

注意不包括出发的节点
在这里插入图片描述

红黑树的性质

由于根节点到任意节点的的路径上所含黑节点的数目相同,最短就是全黑嘛,但最长就是有红节点在路径上,由于不存在相邻的红节点这个特性,所以节点树最多的情况就是在黑节点之间有红节点,此时总结点数模至多为全黑节点的两倍
在这里插入图片描述

红黑树的查找

和查找平衡二叉树和二叉排序树一样,小于走左子树,大于走右子树
在这里插入图片描述

红黑树的插入

在这里插入图片描述

实例

非根节点的插入只需关注不红红的这个问题

插入非根节点为红是为了保持黑路同
插入5后发现有红红,此时叔节点为黑,相对爷节点是LL型,此时父节点右旋换爷节点同时变色
在这里插入图片描述
插入后红红,此时叔为红,此时叔父爷变色,爷看作新节点,,此时爷节点是根但为红色再变色
在这里插入图片描述
此时再插入一个,存在红红,此时叔为黑,且为RR,此时父换爷,同时父和爷变色
在这里插入图片描述
此时加入节点,存在红红,且叔为红,此时叔父爷变色,同时将爷看作新加入的节点,发现没破坏红黑树的特性
在这里插入图片描述
插入3没啥大问题

在这里插入图片描述
插入2,此时红红,同样父换爷,同时染色

在这里插入图片描述
此时红叔,叔父爷变色,同时爷看作新节点
在这里插入图片描述
插入35
在这里插入图片描述
插入25

在这里插入图片描述
插入18
在这里插入图片描述
插入22
红红,叔为红,叔父爷变色,此时将爷看作新节点,此时存在红红,而该新节点叔为红,所以此时叔父爷都变色,此时的爷看作新节点,但为红节点,所以变黑

在这里插入图片描述
插入23,此时红红,叔为黑,且为LR,此时左旋再右旋,最后变色

在这里插入图片描述
左旋结果
在这里插入图片描述
右旋结果

在这里插入图片描述
最后将原来的儿爷节点变色

在这里插入图片描述
插入24
红红,此时叔父爷变色,爷看作新节点,存在红红
此时叔为黑,为LR
在这里插入图片描述
先左旋
在这里插入图片描述
再右旋
在这里插入图片描述
原本的儿爷变色
在这里插入图片描述
插入19
在这里插入图片描述
插入18
此时已经存在18,可以放18的左边也可以放右边

若插入右边
在这里插入图片描述
先右旋
在这里插入图片描述
再左旋

在这里插入图片描述
原本儿爷变色

在这里插入图片描述

小结

由根节点到叶节点的最长路径不大于最短路径的两倍可知道左右子树的高度也不过两倍关系
在这里插入图片描述

与黑高相关的理论

外部节点就是空节点
根节点黑高为h的红黑树,此时内部节点要最少的话,必须即全黑即可,因为有红的话不能有相邻的。而此时全黑的情况下也是吗,满树,不然达不到从根节点的黑高为h
在这里插入图片描述
黑高大于等于h/2是由于如果是一个黑一红那么黑高将大于等于h/2,又由根节点黑高可得出内部节点数最少数量,最后可得出总高度的范围
在这里插入图片描述

红黑树的删除

删除方式和二叉排序树一样
只是调整方式不同
在这里插入图片描述

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

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

相关文章

【Java】网络编程-TCP回显服务器代码编写

前面我们讲了基于UDP的网络编程 UDP回显服务器 UDP字典服务器 下面我们来讲基于TCP的回显服务编写 1、服务器 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; impo…

opencv入门到精通——OpenCV4.1.2之性能衡量与优化方法

目录 目标 使用OpenCV衡量性能 OpenCV中的默认优化 在IPython中衡量性能 更多IPython魔术命令 性能优化技术 目标 在图像处理中,由于每秒要处理大量操作,因此必须使代码不仅提供正确的解决方案,而且还必须以最快的方式提供。因此&#…

1270. 数列区间最大值(线段树求区间最大)

题目&#xff1a; 1270. 数列区间最大值 - AcWing题库 输入样例&#xff1a; 10 2 3 2 4 5 6 8 1 2 9 7 1 4 3 8输出样例&#xff1a; 5 8 代码&#xff1a; #include <cstdio> #include <iostream> #include <climits>//INT_MIN头文件using namespace s…

【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

2023年终总结 | 四平八稳

年度回顾 年度关键词&#xff1a;四平八稳 百科解读&#xff1a;形容物体放置的平稳或言行稳当&#xff1b;也指做事但求无过&#xff0c;不思进取。 我在写这篇文章就在思考用什么关键词来描述我过去这一年&#xff0c;似乎这一年没有特别让我特别惊喜的事情&#xff0c;无论是…

【实训项目】消费账单记录小程序

1.项目说明 背景&#xff1a; 着网络技术的不断发展&#xff0c;人们的消费观念在不断变化&#xff0c;消费手段也变得错综复杂。很多人都在困扰&#xff0c;钱到底花在了那里。 目的&#xff1a; 为了解决很多人的钱花在哪了的困扰&#xff0c;我们组决定制作一个消费账单…

【原理图PCB专题】原理图图纸锁定/解锁与PCB文件加密方式

在工作中我们会遇到需要冻结原理图进行评审和加密图纸防止被他人盗用的需求。那么在OrCAD Capture中如何对图纸进行锁定与解锁,如何在Allegro中对PCB工程进行加密呢? 原理图锁定与解锁 打开原理图,在图纸中单击右键,选择lock/unlock就可以进行锁定与解锁。 锁定时图纸图…

xml 可扩展标记语言

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

【CF闯关练习】—— 900分段

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

java定义三套场景接口方案

一、背景 在前后端分离开发的背景下&#xff0c;后端java开发人员现在只需要编写接口接口。特别是使用微服务开发的接口。resful风格接口。那么一般后端接口被调用有下面三种场景。一、不需要用户登录的接口调用&#xff0c;第二、后端管理系统接口调用&#xff08;需要账号密…

loki-日志

一、loki Github ELK虽然功能丰富&#xff0c;但规模复杂&#xff0c;资源占用高&#xff0c;操作苦难&#xff0c;很多功能往往用不上&#xff0c;loki 受 prometheus 启发的水平可扩展、高可用、多租户日志聚合系统&#xff0c;它的设计非常经济高效且易于操作&#xff0c;…

使用【OpenI启智平台】进行模型训练

前言 启智平台OpenI是一个人工智能开源开放平台&#xff0c;提供免费GPU算力可以进行模型训练。模式是git进行项目管理&#xff0c;可以创建调试任务调试代码以及保存镜像&#xff0c;创建训练任务训练模型&#xff0c;也提供推理和评测&#xff0c;我没用过就不讲述了。后来我…

Sketch软件免费中文版在线使用教程及下载安装指南

什么是Sketch&#xff1f; Sketch是一款专为设计量身定制的矢量绘图软件&#xff0c;广泛应用于UI/UX设计和原型制作。 Sketch由荷兰Bohemiancoding公司开发&#xff0c;并于2010年首次发布。当时&#xff0c;AdobePhotoshop、AdobeIlustrator等主流设计工具虽然功能强大&…

MySQL-1

1 数据库基础概念 Data数据 对客观事物的符号表示&#xff0c;如图形符号、数字、字母等&#xff0c;数据是数据库中存储的基本对象。2. DB数据库数据库(Database,简称DB)的定义&#xff1a;“按照数据结构来组织、存储和管理数据的仓库” 3. DBMS数据库管理系统概念&#xff…

Qt WebAssembly开发环境配置

目录 前言1、下载Emscripten SDK2、 安装3、环境变量配置4、QtCreator配置5、运行示例程序总结 前言 本文主要介绍 Qt WebAssembly 开发环境的配置。Qt for Webassembly 可以使Qt应用程序在Web上运行。WebAssembly&#xff08;简称Wasm&#xff09;是一种能够在虚拟机中执行的…

FFmpeg 简单文档

一、播放器框架 常用音视频术语 容器&#xff0f;文件&#xff08;Conainer/File&#xff09;&#xff1a;即特定格式的多媒体文件&#xff0c;比如mp4、flv、mkv等。媒体流&#xff08;Stream&#xff09;&#xff1a;表示时间轴上的一段连续数据&#xff0c;如一段声音数据、…

【圣诞】极安云科赠书活动第①期:CTF实战:从入门到提升

【圣诞】极安云科赠书活动第①期&#xff1a;CTF实战:从入门到提升 9787111724834 9787121376955 9787302556275 ISBN编号&#xff1a;9787111724834 书名&#xff1a;CTF实战:从入门到提升 定&#xff1a;99.00元 开本&#xff1a;184&#xff4d;&#xff4d;260&#xff…

Stable-diffusion-webui本地部署和简要介绍

Stable Diffusion 是一款基于人工智能技术开发的绘画软件&#xff0c;它可以帮助艺术家和设计师快速创建高品质的数字艺术作品。是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;同时也可以应用于其他任务&#xff0c;如内补绘制、…

提示“由于找不到mfc140u.dll,无法继续执行代码”如何解决?

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到某个动态链接库文件&#xff0c;比如mfc140u.dll。这个问题可能会导致某些应用程序无法正常运行或打开。 一、关于找不到mfc140u.dll文件造成会的问题 mfc140u.dll是Visual C中的一个…

【Amazon 实验①】Amazon WAF功能增强之实验环境准备

文章目录 1. 实验介绍2. 实验环境准备 1. 实验介绍 在真实的网络空间中&#xff0c;攻击者会使用大量广泛分布的僵尸网络、肉机等发起对目标的攻击。 其来源分布一般比较分散&#xff0c;因此难以简单防范。 本实验联合使用有多种AWS服务&#xff1a;Cloudfront、 Lambdaedge…