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

文章目录

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

红黑树的定义和性质

为什么要发明红黑树?

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

红黑树怎么考

在这里插入图片描述

总览

在这里插入图片描述

红黑树的定义

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

实例:一颗红黑树

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
将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.hqwc.cn/news/292653.html

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

相关文章

YOLOv8涨点技巧:一种新颖的多尺度特征融合iAFF,适配小目标检测

💡💡💡本文全网独家改进:1)引入了一种新颖的多尺度特征融合iAFF;2)为了轻量级部署,和GhostConv有效结合在边缘端具有竞争力的准确性 💡💡💡在YOLOv8中如何使用 1)iAFF加入Neck替代Concat;2)Conv替换为GhostConv;3)加入C3Ghost; 💡💡💡Yolov8魔术…

Java小案例-Java实现人事管理系统

前言 《人事管理系统》该项目采用技术jsp、Struts2、Mybatis、dwr、tomcat服务器、mysql数据库 开发工具eclipse/idea。 【项目使用技术】 Struts2Mybatisdwrjqueryjscss等技术 前端使用技术:JSP, dwr、jquery、js、css等 后端使用技术:Struts2Myba…

Spring事务管理—讲解、案例、应用

简介:Spring事务管理和数据库的事务管理的功能作用上是一样的,在学习数据库时,为了数据完整性,采用了事务管理,即开启事务、提交事务和管理事务。在SpringBoot框架中添加一个注解 Transactional 就可以将当前方法、类和…

C语言之输入输出和字符(2)

目录 缓冲和重定向 ▇缓冲 ▇重定向 字符 转义字符 \和\"……字符和字符" 字符串字面量的写法 字符常量的写法 八进制转义字符和十六进制转义字符 字符编码 在看本节之前,请先看下上一章,做到更好地衔接。https://blog.csdn.net/W061…

为啥 1000 == 1000 是 false

今天跟大家聊一个有趣的话题,在Java中两个Integer对象做比较时,会产生意想不到的结果。 例如: Integer a 100; Integer b 100; System.out.println(ab);其运行结果是:true。 而如果改成下面这样: Integer a 100…

【动画图解】一次理清九大排序算法!面试官问到再也不慌!

排序算法 交换排序 冒泡排序快速排序 插入排序 直接插入排序希尔排序 选择排序 简单选择排序堆排序 归并排序基数排序桶排序 一、冒泡排序 冒泡排序是一种简单的交换排序算法,以升序排序为例,其核心思想是: 从第一个元素开始&#xff0c…

.NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式

之前写过使用自定义返回类的方式来统一接口数据返回格式,.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客 但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不…

解决IDEA编译/启动报错:Abnormal build process termination

报错信息 报错信息如下: Abnormal build process termination: "D:\Software\Java\jdk\bin\java" -Xmx3048m -Djava.awt.headlesstrue -Djava.endorsed.dirs\"\" -Djdt.compiler.useSingleThreadtrue -Dpreload.project.path………………很纳…

Valentina Studio Pro for Mac:高效数据库管理工具

作为一款强大而高效的数据库管理工具,Valentina Studio Pro for Mac在Mac平台上的表现无疑是令人印象深刻的。无论您是初学者还是专业数据库管理员,Valentina Studio Pro都能够满足您的需要,并提供一流的工具和功能来简化数据库管理的过程。 …

linux静态ip配置方法(vmware虚拟机)

1、背景 自己搭建了一个虚拟机,vmware虚拟机,如果使用动态ip,经常变换地址,登录不方便。 优点: 静态网络配置的好处是该服务器地址是静态ip的,不会随着网络更换而出现波动。 2、配置方法 2.1 进入centos系统&#…

HarmonyOS 应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志,难以识别其中的关键信息。因此,应用开发者需要一种数据打点机制,用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

C++之深拷贝和浅拷贝

目录 浅拷贝 深拷贝 赋值运算符重载的深拷贝 在学习C类和对象时我们学习了浅拷贝,本期我们将再次回顾浅拷贝并为大家讲述深拷贝的概念。 浅拷贝 在学习类和对象时我们学习了拷贝构造函数的概念,而且我们也知道,因为拷贝构造函数属于类的默…