通过左旋和右旋来实现搜索二叉树的自平衡

news2024/10/2 12:31:34

首先左旋和右旋的概念都是在平衡二叉树的基础上提出的。并对AVL树 SB树 红黑树在原理层面进行了简单的介绍,无coding。

什么是左旋?

假设存在下述平衡二叉树(某个结点的左子节点都小于该结点,右子结点右大于大结点),如果要进行左旋,则将整个数往左旋转,C成为新的头节点。

 因为原树为平衡二叉树,那么C的左子树都小于C,并且都大于A,那么C成为新的头节点过后将C的左子树挂在A的右方即可,如下图所示:

什么是右旋?

和左旋对应,如下图所示的树:

 

 右旋过后图为:

 

AVL树对于四种情况怎么进行调整(AVL树需要更新高度信息):

1. LL 左树左边过长

做一次右旋即可,比如:

右旋后:

 

2. RR 右树右边过长

做一次左旋,具体的图就不贴了,根据左旋右旋的概念对应LL类型进行理解即可。

3. LR 左树右边过长

这个时候需要将左树的右子树头节点调整为头部,及将D调整为头节点,需要进行一次左旋和一次右旋,如下图所示:

4. RL 右树左边过长

需要将右树的左子树头节点调整为头部做,一次右旋和左旋,具体的图就不贴了,根据左旋右旋的概念对应LR类型进行理解即可。

Size-Balance 树 即-SB树:

树的构造原理为:叔叔树的大小不能小于其任何侄子数的大小,也就是说,如下图所示,A C代表的是节点,B D E都代表子树,B的大小不能够小于D E中任何一个子树的大小。

调整方式:

1. LL 左子树的左子树大于右子树 

右旋 ; 递归调整(对任何子结点发生变化的结点进行LL同样的操作)。

2. RR 右子树的右子树大于左子树 

左旋 ; 递归调整(对任何子结点发生变化的结点进行RR同样的操作)。

3. LR 左子树的右子树大于左子树

让左子树的右子树头节点,通过先左旋再右旋成为整个树的头节点 ; 递归调整。

3. RL 右子树的左子树大于右子树

让右子树的左子树头节点,通过先右旋再左旋成为整个树的头节点 ; 递归调整。.

红黑树:

1. 每个结点不是红就是黑

2. 头节点和底层叶节点(为空的点)必须为黑

3. 任何两个红节点不能相邻

4. 对于任何一个子树来说,头节点出发到叶节点要求黑节点一样。

具体的调整方式有些复杂,这里不做过多介绍,可以移步:

红黑树详解_晓之木初的博客-CSDN博客_红黑树icon-default.png?t=M85Bhttps://blog.csdn.net/u014454538/article/details/120120216

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

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

相关文章

初识单链表/单链表头指针的创建

链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构。链表不像数组中的元素那样,每个数据的的地址是连续的。数组的物理存储结构:数组中上一个数据的地址和下一个数据的地址是连续的,正好差一个整型大小 链…

做副业找不到好项目?公众号依旧是最优选择

大家好,我是蝶衣王的小编,今天分享一下公众号还是否值得做呢 说到做自媒体账号赚钱,有些人可能会说是2022年谁看公众号,阅读量都不如以前了,大家都跑去刷短视频。其实不错,但是对于不想露脸的人来说&#…

深圳大学数学文化赏析MOOC第二次作业答案(满分)

一、单选题 (共 40.00 分) 1. 以下各数集中,不可数的一个是( ) A. 自然数集 B. 整数集 C. 有理数集 D. 无理数集 满分:2.00 分 得分:2.00 分 你的答案: D 正确答案: D 教师评…

java计算机毕业设计ssm重点实验室系统

项目介绍 本重点实验室系统是针对目前仓库的实际需求,从实际工作出发,对过去的重点实验室系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、…

机器学习100天:目录

《机器学习100天》!理论python!实战真正的从零开始机器学习,循序渐进,适合初学者快速入门和进阶! 思维导图: 第0章:准备工作 001 开发环境搭建 第1章:数据预处理 002 导入数据集 …

超级简单的vue课程设计电商购物系统,没有数据库文件,通过模拟数据操作

详细地址:《《《下载地址》》》 基于vue前端项目开发的电商购物系统,主要包括商品的列表、商品的详细页、加入购车、注册、用户登录用户等基本的功能。适合于课程设计,该项目的开发没有用到MYSQL数据库,通过模拟数据进行读取&…

转行如何自学Python并且找到工作,分享自己心得

我是25岁转行学python的。说实在,转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景,三流大学毕业,电子商务专业,学习能力一般,没啥特别技能,反正就很普通…

Charles mock数据:

前提:确保手机已和PC上的Charles代理链接成功。 我们在平时的业务开发中,经常有端上已开发完成,但后端接口还没有Ready的情况;或者需要接口频繁变更数据来测试各种case的情况。这样如果过度依赖接口,肯定会极大降低我…

[附源码]Node.js计算机毕业设计糕点销售网站Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

毕业设计-基于大数据的房地产数据分析与预测-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【Numpy】Numpy光速起步(初学者必备基础知识)

Ding Jiaxiong【2022-12-16】 Gitee仓库:https://gitee.com/DingJiaxiong/machine-learning-study.git 文章目录导入numpy认识数组数组的更多信息创建基本数组添加、删除和排序元素数组的形状和大小重塑数组将一维数组转换为二维数组【即如何向数组中添加新轴】索引和切片从现有…

jsp+ssm计算机毕业设计病历管理系统设计【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

Qt中几个函数的使用方法

一、把字符串转换成整形 demo1: QString str "FF"; bool ok; int hex str.toInt(&ok, 16); // hex 255, ok true int dec str.toInt(&ok, 10); // dec 0, ok false demo2: bool ok; QString line "123"; int line1 line.toInt(&ok)…

重新认识CSS的尺寸体系,熟悉但是不多

前情提要 为了丰富自己是知识体系(为了日更薅羊毛),我最近频繁翻阅MDN的文档,果然MDN文档常看常新。 今天翻到CSS部分,然后发现width和height里,有几个属性值眼熟但是不多,值得好好研究一下&a…

马士兵内部共享—1658页《Java面试突击核心讲》

为助力广大程序员朋友 “面试造火箭”,小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》! 面试神技——1658页《Java面试突击核心讲》 主要包含:Java基础、JVM、多线程、MySQL、Spring、SpringBoot、Spr…

HTML期末作业 蛋糕bootstrap响应式网站html+css+javascript+jquery+bootstarp

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

接手项目代码,作为测试我做了什么

推荐阅读: [内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取~ Python自动化测试全栈性能测试全栈,挑战年薪40W 从功能测试进阶自动化测试,熬夜7天整理出这一份超全学习指南【附网盘资源】 测试人员如何快速熟悉项目代码…

Linux操作系统的安全合规性检查和加固

1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险。 操作步骤 使用命令 userdel 删除不必要的账号。 使用命令 passwd -l 锁定不必要的账号。 使用命令 passwd -u 解锁必要的账号。 1.2 检查特殊账号 检查是否存在空口令和root权限的账号…

企业员工电脑软件应该如何选择?

现在很多企业都希望购买上网行为管理软件,因为这种软件可以控制员工的行为,可以避免员工在工作的时候做与工作无关的事情。但是这种软件应该如何采购,很多企业都搞不懂,现在就来看看在购买上网行为管理软件时应该如何选择。 1. 监…

presto查hive报错:end index must not be greater than size 问题分析和解决

tips presto 0.208连接hive有不少坑,请尽量不要选择这个版本。presto0.208以上的版本,jdk需要8_151。 问题还原: 集群环境 hive 1.1.0 presto 0.208 hadoop 2.6 集群有张hive表使用hive-cli查询是OK, 但是使用presto cli进行selec…