数据结构-考研难点代码突破(树型查找 - 红黑树(RBT)插入流程图,删除)

news2024/9/26 3:28:37

文章目录

  • 1. 红黑树的定义和性质
    • 红黑树的插入操作流程
    • 红黑树的删除(了解)

1. 红黑树的定义和性质

红黑树查找与删除的效率和AVL树相同。

但是因为AVL树在插入或删除节点可能破坏AVL树结构,而重新调整树的开销大。所以引出了红黑树。

红黑树的插入和删除一般无需调整树的结构,相比于AVL树的调整开销小。

所以,在以查为核心的操作下,适合使用AVL树结构;如果要频繁的插入或删除元素,更适合使用红黑树


红黑树定义:

  1. 红黑树首先是二叉排序树
  2. 红黑树的每个节点有两种颜色(红,黑色)
  3. 树的根节点是黑色的。
  4. 树的空节点都是黑色的.
  5. 不存在两个相连的红节点(红节点的父亲与孩子都是黑色的)
  6. 对于每一个节点来讲,到任意叶节点的简单路径上,黑节点个数相同

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

红黑树性质:

  1. 从根节点到叶节点的最长路径不大于最短路径的二倍。

  2. n个节点的红黑树的高度h<2log(N+1)

    红黑树高度为h,根节点的黑高>h/2,高度为h的红黑树节点最少为全是黑色的满二叉树。所以内部节点个数n>2h/2-1,求得h<2log(N-1)

红黑树的插入操作流程

步骤:

  1. 先按照搜索二叉树的插入方式进行插入新节点。

  2. 如果这个节点是根节点,颜色为黑色。如果节点不是根节点,颜色为红色。

    • 如果插入的节点破坏了红黑树的定义,调整时需要看新插入的节点的叔叔节点的颜色
    • 如果叔叔节点是黑色的,需要对红黑树进行旋转+变色操作
      • 红黑树的旋转与AVL树的旋转相同(LL,RR,RL,LR型旋转)
      • LL:右单旋,父换爷+变色
      • RR:左单旋,父换爷+变色
      • LR:左右双旋,儿换爷+变色
      • RL:右左双旋,儿换爷+变色
    • 如果叔叔节点是红色的,需要对红黑树进行变色+变新操作
      • 叔父爷换色,爷变为新节点

具体操作:

红黑树插入:20,10,5,30,40,57,3,2,4,35,25,18,22,23

在红黑树插入节点只可能破坏“不存在两个相连的红节点(红节点的父亲与孩子都是黑色的)这个条件”

  1. 按照搜索二叉树插入到如下图时,需要调整红黑树结构(新插入节点5)
    在这里插入图片描述
    叔叔节点是null,是黑色,插入的5属于LL型,需要进行右单旋操作
    在这里插入图片描述
  2. 之后插入30节点,又不符合红黑树的定义,需要进行调整
    在这里插入图片描述
    上图新插入节点的叔叔是5节点,是红色的。执行步骤 “叔父爷换色,爷变为新节点”

在这里插入图片描述
3. 插入节点40,破坏了红黑树的特性
在这里插入图片描述

新插入的节点的叔叔是黑色的空节点,插入类型是RR型

操作:左单旋,父换爷+变色

在这里插入图片描述
4. 插入57,需要调整红黑树
在这里插入图片描述
新节点叔叔20是红色的,调整步骤为:叔父爷换色,爷变为新节点
在这里插入图片描述

  1. 插入3,2节点后,插入2时破坏的红黑树特性

节点2的叔叔是黑色的,属于LL型,右单旋,父换爷+变色
在这里插入图片描述

  1. 插入4节点后,破坏了红黑树的特性需要进行调整

插入节点4的叔叔节点是红色的,叔父爷换色,爷变为新节点
在这里插入图片描述
7. 插入35,25节点不会改变红黑树特性,插入22节点后会改变红黑树特性

22节点叔叔节点是红色的,叔父爷变色后,爷变成新节点
在这里插入图片描述
变色后发现仍然不是红黑树,此时爷节点变成新节点继续调整红黑树

此时30是作为新插入节点,叔叔节点是红色的,叔父爷变色,爷变成新节点
在这里插入图片描述
新节点变为根节点,根节点变为黑色
在这里插入图片描述
8. 插入23节点,破坏了红黑树特性,叔叔节点是黑色的,且是LR型,左右双旋,儿换爷+变色(儿爷变色)
在这里插入图片描述

红黑树的删除(了解)

  1. 红黑树删除操作的时间复杂度O(logN)
  2. 红黑树中删除结点的处理方式和二叉排序树的删除一样
  3. 按第二步删除结点后,可能破坏“红黑树特性”,此时需要调整结点颜色、位置,使其再次满足“红黑树特性”。

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

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

相关文章

内网渗透(五十二)之域控安全和跨域攻击-搭建和查看域信任关系

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

为什么你的客户不喜欢用你的知识库呢?

现在很多企业的知识库处于一个完全荒废的状态&#xff0c;极少顾客愿意去查询使用&#xff0c;有的客户甚至完全停止使用企业知识库&#xff0c;这到底是为什么呢&#xff1f;看过许多公司的知识库后&#xff0c;总结了几个知识库失败的原因&#xff0c;并且提出了几个解决方法…

flink sql 执行慢问题排查(flink jdbc where 条件没有下推数据库)

最近在使用 flink sql &#xff08;jdbc&#xff09;执行一个简单表同步&#xff0c;可是执行了半天都没有执行完&#xff0c;后面通过 jstack 找到了问题原因&#xff1a;where条件没有下推到数据库执行。 任务如下&#xff1a; create table mysql_a ( id1 string, id2 at…

vue路由跳转取消上个页面的请求

场景描述&#xff1a; ​ 项目中&#xff0c;有一个Steps 步骤条&#xff0c;包含三步审核&#xff0c; 当页面跳转时&#xff0c;不管当前处于第几步&#xff0c;都需要停止上个页面正在执行或还未执行的逻辑。 需求&#xff1a;当vue路由跳转时&#xff0c;取消执行上个页面…

和中国信通院美图公司技术专家见面,聊聊FinOps从概念到落地

成本优化成为企业上云的核心关切。目前&#xff0c;许多以“上云”为数字化转型路径的企业正面临着严重的云上超支问题。 数据库软件上市公司 Couchbase 曾发布一则报告称&#xff1a;一个典型的企业每年在云服务的支出超过3300万美元&#xff0c;这个数字比企业必要的支出还多…

【类与对象】封装对象的初始化及清理

C面向对象的三大特性&#xff1a;封装、继承、多态。具有相同性质的对象&#xff0c;抽象为类。 文章目录1 封装1.1 封装的意义&#xff08;一&#xff09;1.2 封装的意义&#xff08;二&#xff09;1.3 struct 和 class区别1.4 成员属性设置为私有练习案例&#xff1a;1 设计…

go gin学习记录5

有了前面几节的学习&#xff0c;如果做个简单的web服务端已经可以完成了。 这节来做一下优化。 我们实验了3种SQL写入的方法&#xff0c;但是发现每一种都需要在方法中去做数据库链接的操作&#xff0c;有些重复了。 所以&#xff0c;我们把这部分提取出来&#xff0c;数据库链…

【C/C++】中【typedef】用法大全

总结一下typedef用法&#xff0c;一共七种&#xff0c;分别是&#xff1a;为基本数据类型起别名、为结构体起别名、为指针类型起别名、为数组类型起别名、为枚举类型起别名、为模版函数起别名。 目录 一、为基本数据类型起别名 二、为结构体起别名 三、为指针类型起别名 四…

Windows应用之——设置定时关机

一 概述 本文介绍window设置自动关机的两种方式&#xff1a; cmd指令设置自动关机任务计划程序设置自动关机第三方定时关机软件 二 cmd指令设置自动关机—不推荐 2.1 自动关机-开启(管理员模式下) 依次点击‘“开始”&#xff0c;在“搜索程序和文件”中输入cmd&#xff0c…

Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜

本文介绍基于Python语言中gdal模块&#xff0c;对遥感影像数据进行栅格读取与计算&#xff0c;同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求具体为&#xff1a;现有自行计算的全球叶面积指数&#xff08;LAI&#xff09;.tif格式栅格产品&#xff08;下称“自…

关于Transformer的一些问题总结

一些与Transformer模型相关的问题总结&#xff0c;有不对的欢迎指出。 &#x1f4a1; 残差网络为何可以解决梯度消失 对比1和2可以发现&#xff0c;对于普通网络&#xff0c;当有几个偏导很小的时候&#xff0c;梯度会迅速趋近于0&#xff1b;而对于残差网络&#xff0c;要趋近…

基于appium的app自动化测试框架

App自动化测试主要难点在于环境的搭建&#xff0c;appium完全是基于selenium进行的扩展&#xff0c;所以app测试框架也是基于web测试框架开发的 一、设备连接 &#xff08;即构建基础的测试环境&#xff0c;保证可以驱动设备进行操作&#xff09; 0.准备测试环境 1&#xff0…

第09章_MySQL子查询

第09章_子查询 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了…

Spring MVC 源码 - HandlerAdapter 组件(一)之 HandlerAdapter

HandlerAdapter 组件HandlerAdapter 组件&#xff0c;处理器的适配器。因为处理器 handler 的类型是 Object 类型&#xff0c;需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变&#xff0c;比如用户的处理器可以实现 Controller 接口或者 HttpReques…

从零开始学typescript

https://coding.imooc.com/learn/list/412.html 公司花钱买的&#xff0c;我边学边做笔记 设置 vscode设置 然后下个Prettier - Code formatter 以后保存就能格式化了 下载ts npm install typescript3.6.4 -g ts版本 npm install -g ts-node8.4.1 node执行ts文件 这样&a…

_linux (TCP协议通讯流程)

文章目录TCP协议通讯流程TCP 和 UDP 对比TCP协议通讯流程 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器初始化: 调用socket, 创建文件描述符;调用bind, 将当前的文件描述符和ip/port绑定在一起;如果这个端口已经被其他进程占用了, 就会bind失 败;调用listen, 声…

FPGA入门系列15--SPI(文末有易灵思核心板及配套下载线)

文章简介 本系列文章主要针对FPGA初学者编写&#xff0c;包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解&#xff0c;旨在更快速的提升初学者在FPGA开发方面的能力&#xff0c;每一个章节中都有针对性的代码…

国家推进招投标全过程电子签,契约锁帮助组织减负91%

根据某工程建设集团反馈&#xff0c;电子签章的应用帮助招投标工作实现&#xff1a;“参与方5分钟内线上实名认证&#xff1b;招标、中标通知等格式文件最快2分钟完成盖章&#xff1b;标书等大体量文件20分钟内盖章生成&#xff1b;专家实名认证远程评标、10分钟完成线上开标&a…

leetcode 502. IPO(上市,3种方法)

假设leetcode 即将上市&#xff0c;如何筹集资金的问题。 有两个数组profits和capital, 分别代表第 i 个项目有多少净利润 和 需要多少启动资金。 手上的原始资金是w, 用这个w的资金去启动项目&#xff0c;完成项目之后净利润会加到w上&#xff0c;再做下一个项目&#xff0c; …

硬件原理图中的“英文缩写”大全

设计原理图时&#xff0c;网络标号要尽量简洁眀了。本文总结了一下基本的表示方法&#xff0c;供大家参考。常用控制接口 EN&#xff1a;Enable&#xff0c;使能。使芯片能够工作。要用的时候&#xff0c;就打开EN脚&#xff0c;不用的时候就关闭。有些芯片是高使能&#xff0c…