平衡二叉树的旋转以及简便方法

详细剖析平衡二叉树的四种旋转(附C++代码) 经过一天的学习,笔者发现网上少有人剖析平衡二叉树为何要分为四种旋转情况(尤其是LR型和RL型旋转),学习起来感觉云里雾里。查阅相关资料后,笔者整理了以下几种解释,其中夹杂着笔者自己的理解(笔者也是初学,水平不足,如有缺漏错误的地方,望读者指出)。 一.单向右旋(RR)和左旋(LL) 1. 这个很好理解,可以把节点3的位置看作一个定滑轮(支点),滑轮左边的绳子较长,无法平衡,那么就把1-2-3绳子往右拉,则节点2就被拉到了支点处,左右两边绳子长度相等,重量均匀,则保持平衡。看下面一种情况: . 阅读详情

刚开始听这个平衡二叉树的旋转,一听就蒙了,后来看了很多视频,有很多的说法。下面来介绍平衡二叉树

平衡二叉树:就是每个节点的平衡因子(Balance Factor)(以下简称BF)的绝对值小于等于1,即为0或1。

而BF就是每个节点左子树的高度减去右子树的高度。

平衡二叉树的旋转共有四种情况:

下面说一个定义,新插入的节点为破坏点,而由于破坏点的存在使二叉树失衡(|BF|>1)的节点为被破坏节点

    1.LL型:即为被破坏节点的左子树的左子树插入破坏节点。如图:

 

 

 数值为10的节点的左子树(数值为9的节点)的左子树(数值为8的节点),使其不平衡,而10为被破坏节点,8为破坏节点,那么LL即为10的L的9的L,后一个L为中心,顺时针旋转10节点(右旋),则得到:

 

     RR型:即为被破坏节点的右子树的右子树插入破坏节点。如图

 

 数值为10的节点的右子树(数值为11的节点)的右子树(数值为12的节点),使其不平衡,而10为被破坏节点,12为破坏节点,那么RR即为10的R的11的R,后一个R为中心,逆时针旋转10节点(左旋),则得到:

 

    LR型:即为被破坏节点的左子树的右子树插入破坏节点。如图:

 

 无论怎么旋转发现一次都不能完成,则需先将其转化为LL型(因为LR型第一个为L,所以转化为LL型,再按上面的步骤进行旋转),又因为LL为递减的顺序,所以6应该上去,5下来;

  1.转化为LL型:

 

 这样就构成了LL型,按上面的步骤进行二次旋转

  2.按LL型处理:

 

     RL型:即为被破坏节点的右子树的左子树插入破坏节点。如图:

 

 

先将其转化为RR型,因为RR型,从上往下为递增,因此需要将11向上,12向下,从而构造成,RR型;

  1.转化为RR型

 

   2.正常的RR旋转:

 

 注意:考试的题,二叉树会很复杂,也就是说你要正确的LR,RR,LL,RL对于哪个节点而言,这样你就会明白旋转的中心

旋转的操作都是对不平衡的最小子树,例如如果两个节点都不平衡,则先考虑深度大的节点,因为解决这个问题以后,可能深度小的也自然而然的解决了。

要解决旋转之后产生分支的何去何从,这是你要看分支在原图的位置,和其他点的大小关系,这样你就知道旋转之后,它要依附于哪个点

不管怎么操作都不能改变其中序遍历的顺序

 

认真的思考之后,不难发现,不论用什么方法,操作以后,都是让是三个点之中大小为中间的数做根,比中间数小的数,做根的左孩子,比中间数大的数,做根的右孩子,因此有一个简单的方法:

1.不管什么结构,从最深的叶子节点向上递归查找第一个失衡的点,标号为1.

2.再选1下面的点为2.

3.再选2下面的点为3.

4.不管什么结构,大小为中间的数做根,比中间数小的数,做根的左孩子,比中间数大的数,做根的右孩子

5.然后按照分支和每个点之间的关系,补全,这样就完成了。

 

 

例子:在如图所示的平衡二叉树中插入关键字48后得到一颗新的平衡二叉树,在新的平衡二叉树中,关键字37所在的节点的左右子节点中保存的关键字分别是:

 

 

 插入48之后如图:

 

 从下到上计算每个节点的BF;

BF(48)=0;    BF(37)=-1;    BF(90)=0;    BF(53)=1;    BF(13)=0;    BF(24)=-2;

发现失衡节点为24,那么24编号为1,又因为插入了48(所以造成失衡的路径应为24->53->37->48),所以2号节点为53,3号节点为37

将三个节点排序,则37为根节点,24为左孩子,53为右孩子,如图:

 

 再按原图的关系,补全图:53右孩子为90;49比37大比53小,所以48为53的右孩子;24的左孩子为13;如图:

 

 

可知答案为24 53;

平衡二叉树及其算法实现 文章目录1、平衡二叉树1.1、什么是二叉搜索树1.2、二叉搜索树的缺点1.3、平衡二叉树的提出1.4、如何构建平衡二叉树(ALV树)1.5 失衡情况及其处理(4种)1.5.1 LL——(右旋)1.5.2 RR——(左旋)1.5.3 LR——>(先左旋再右旋)1.5.4 RL——>(先右旋再左旋)1.5.5 总结代码实现1.5.6 小结1.5.7 删除结点后该如何调整平衡二叉树? 1、平衡二叉树 1.1、什么是二叉搜索树 1.2、二叉搜索树的缺点 二叉树查找算法查找时间依赖于树的拓扑结构。查找效 阅读详情

相关推荐

深入解析进化算法中的选择与多样性

在计算科学的世界里,最优雅的解决方案往往源于最古老的智慧——大自然。进化算法(Evolutionary Algorithms, EAs)正是这样一种受达尔文自然选择学说启发的强大工具。它们通过模拟“适者生存”的过程,在庞大的可能性海洋中搜寻最优解。。:指的是深入挖掘和优化已知的优质解。这就像在一片已知的沃土上精耕细作,力求获得最高产量。强大的选择压力会促进这一过程。:指的是在整个搜索空间中寻找全新的、可能更优的解。这好比派遣探险队去发现新大陆,充满了未知与机遇。保持种群的多样性是探索的关键。

weixin_62533513的博客 713

平衡二叉树(AVL)平衡化旋转详解

平衡二叉树的全称是平衡二叉排序树,也称为AVL树,这是因为该树结构是由Adelson-Velskii和Landis在1963年提出的。AVL树是BST树的改进结构,使得平均查找长度得到了减少,进而提高了查找的效率。

sunnyoldboy博客 5423

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

平衡二叉树的旋转

平衡二叉树的旋转都是发生在最小不平衡子树上的,先看一下最简单的最小不平衡子树的形态: 其中结点C的插入导致了平衡树出现了不平衡,那怎么解决更好呢,我有一个想法,那就是把这3个结点中的中位数提到根结点。那我们先来找到中位数,因为平衡二叉树是一颗排序树,对于这4种形态的树,中位数都在固定的位置: 那么我们现在来利用简化版的左旋右旋操作将中位数提到根节点: 通过这里可以大致明白旋转的操作的意义了: 左旋B:即将父亲结点A当做自己的左孩子 右旋B:即将父亲结点A当做自己的右孩子 下面看一下复杂一点的最小

weixin_43710268的博客 4412

linux离线安装nginx

linux离线安装nginx

zhang_130914036的博客 9346

ESP32 TWAI CAN库实战:从零构建CyberGear微电机控制框架

本文详细介绍了如何利用ESP32的TWAI控制器和Arduino环境,从零构建一个面向对象的CyberGear微电机控制框架。该框架将复杂的CAN通信协议封装为简洁的API,开发者无需深究底层细节,即可轻松实现电机的速度、位置和扭矩控制,大幅简化机器人关节、云台等项目的开发流程。

oil88的博客 499

平衡二叉树旋转机制

左旋是将一个节点的右子节点旋转到它的位置上,同时将该节点移到其左侧,并重新连接其子节点。右旋是将一个节点的左子节点旋转到它的位置上,同时将该节点移到其右侧,并重新连接其子节点。平衡二叉树的旋转机制是一种通过对树进行旋转操作来保持其平衡的方法。平衡二叉树的旋转机制包括两种基本类型的旋转:左旋和右旋,以及它们的组合。

qq_52146944的博客 1505

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 502

平衡二叉树(AVL)的左旋转右旋转和双旋转

平衡二叉树的介绍 首先,咱们先来说一下为什么要提出平衡二叉树的概念,如果一个二叉排序树是一个只有左子树或者右子树的二叉排序树的时候,其实它就相当于一个链表,但是他的查询,删除,遍历的速度却没有链表快。这是为什么呢。因为在每次查询,删除,遍历的时候,要去判断他的左节点或者右节点是否为null,所以浪费了时间。所以我们提出平衡二叉树的概念 基本介绍 1)平衡二叉树也叫平衡二叉搜索树(Self-bala...

interesting_code的博客 2275

【MuJoCo】第一章 仿真环境的搭建与入门

它通过优化的接触动力学算法,能够高效处理复杂的多体交互,这使其成为从机械臂操控到足式机器人运动,再到大规模强化学习训练的理想选择。特别是与 JAX 集成的 MJX 的推出,将高性能仿真的边界推向了新的高度,使得在单台机器上并行数千个仿真环境成为可能。我们将通过编写您的第一个仿真程序,逐步拆解 MuJoCo 的工作流,让您亲手感受物理引擎的脉动。这种加速能力对于需要海量仿真样本的强化学习算法(如 PPO)是颠覆性的,它将原本需要数小时的训练缩短到几分钟。上的几何形状,用于碰撞检测和可视化。

u012133341的博客 368

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

本文介绍了在nnunet中加入ChannelAttention的方法,按照本文教的教程,可以快速完成ChannelAttention的加入和自定义模型的跑通。

AI爱好者的博客,分享计算机领域相关知识 5800

浅析平衡二叉树的四种旋转

浅析平衡二叉树(AVL树)的四种旋转 平衡二叉树中每个节点的左子树和右子树高度之差的绝对值小于等于1 在二叉树插入数据后会有四种类型,为了符合平衡二叉树左孩子与右孩子高度只差绝对值小于等于1,那么就会形成四种旋转变形,以达到平衡。 一.LL型 如图所示,插入数据10,8,5,根据二叉树插入数据规则,因为8小于10,那8就在10的左边,然后插入数据5,5小于10,5又小于8,5就在8的左边,就会形成LL型。此时不符合平衡二叉树定义,为了达到左右孩子平衡,需要进行旋转。10经过一次右旋,结果左右孩子平衡。

IT夜幕的博客 6958

【100%通过率】2023华为od机试C卷【电脑病毒感染】C语言 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 1041

平衡二叉树旋转详解

平衡二叉树的定义(AVL)定义 平衡二叉树或者是一棵空树,或者满足以下的性质:它的左子树和右子树的高度之差的绝对值不超过1,并且左子树和右子树也是一个平衡二叉树。 平衡因子 左子树高度减去右子树的高度的值或者右子树高度减去左子树高度的值。显然 -1 <=bf <= 1 AVL树的引入 平衡二叉树在二叉排序树上引入的,在二叉树中,如果插入的节点接近有序,那么二叉树就会退化为链表大大降低了查找效率

Hyacinth_Dy 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【数据结构】平衡二叉树的调整(RR LL LR RL)旋转详解讲解

平衡二叉树的调整旋转的命名规则RR旋转(右单旋)LL旋转(左单旋)LR旋转(左右旋转)RL旋转(右左旋转) 旋转的命名规则 如图初始插入节点Nov后,Mar节点的平衡因子(左右两个子树的高度差的绝对值)大于1,不满足平衡二叉树性值,所以要对其进行调整 其中Mar节点的平衡因子大于了1,所以称Mar节点为“发现者”,因为插入了Nov节点导致平衡二叉树被破坏,所以Nov节点称为“麻烦节点” 所谓旋转,如RR旋转之所以叫RR旋转是因为:不平衡的“发现者”是Mar,“麻烦结点”Nov 在发现者(Mar)右子树的右

这道题我不会做...不会做啊..太难了!! 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

平衡二叉树旋转

平衡二叉树旋转的过程。

LUOZONGW的博客 2300

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Java】平衡二叉树旋转机制

1)回顾首先是二叉树,在普通的二叉树中,数据是没有任何规律的,查询效率会比较低,为了解决这个问题,所以有了二叉搜索树。在添加节点的时候会遵守一个规则:小的存左边,大的存右边,一样的不存。因此它的数据就有规律了,那么在查询起来的时候效率也比较高。但是它有自己的弊端,它容易出现长短腿的现象,一旦出现长短腿,那么就跟链表差不多了,而且还是单向链表,同样会影响效率。所以为了解决这个问题,就有了平衡二叉树。在平衡二叉树中,任意节点左右子树高度差不能超过1,因此它的查询效率要更高。----

qq_39921135的博客 1723

学习:平衡二叉树的旋转机制

平衡二叉树(Balanced Binary Tree)是一种二叉树,其特点是在插入或删除节点时,通过一定的机制保持树的平衡。常见的平衡二叉树包括AVL 树和红黑树。本文主要以 AVL 树为例,讲解其工作原理和实现细节。平衡二叉树通过旋转操作保持树的平衡,从而确保操作的时间复杂度维持在 \(O(\log n)\)。四种基本的旋转操作(左左、左右、右右和右左)是维护树平衡的核心手段。理解这些旋转操作及其应用,可以帮助我们设计和实现高效的数据结构,确保在各种应用场景中提供稳定的性能。

weixin_75156045的博客 1338

平衡二叉树详解

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。 平衡二叉树大部分操作和二叉查找树类似,主要不同在于插入删除的时候平衡二叉树的平衡可

尽量致力于发表微服务、中间件和算法等原创作品。 4万+

平衡二叉树的旋转_平衡二叉树的旋转

一、平衡二叉树的定义为避免树的高度增长过快,降低二叉树的排序性能,规定在插入和删除二叉树结点时,保证任意结点的左右子树高度差的绝对值不大于1。这样的二叉树被称为平衡二叉树(Balanced Binary Tree)。二、平衡因子平衡因子:结点的平衡因子 = 结点的左子树深度 —结点的右子树深度。若平衡因子的取值为-1、0或1时,该节点是平衡的,否则是不平衡的。最低不平衡...

weixin_39614228的博客 354

【高阶数据结构】平衡二叉树(AVL)的插入(4种图解旋转方法)

一篇文章彻底学会平衡二叉树的4种旋转方法,配图讲解超清晰!LL型插入,RR型插入,LR型插入和RL型插入

更新C/C++,数据结构与算法,计算机视觉,深度学习,目标检测 4215

平衡二叉树插入—单旋转双旋转问题

平衡二叉树插入一个节点时,往往会造成平衡二叉树的不平衡,这时就要我们编写程序恢复平衡二叉树的平衡。下图就因为插入了1,造成了树的不平衡。

ZhengKen 6030

【数据结构】平衡二叉树(AVL),左旋转,右旋转,双旋转

大家好,我是被白菜拱的猪。 一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。 文章目录一、写在前言二、平衡二叉树(一)平衡二叉树介绍1、Why2、What3、how(二)平常二叉树构造1、左旋转2、右旋转3、双旋转(三)代码实现三、结束语 一、写在前言 还有一天,后天就要回学校了,心里无比的激动,但是暑假开始之前信誓旦旦说要完成这个完成那个,到头来什么也没完成,SpringBoot没有学完,Vue也没有学完,数据结构还有部分内容,嗐,今天把树的剩余内容搞

放开这颗白菜让我来 1112

实现平衡二叉树(AVL树)的旋转

平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为 AVL 树, 可以保证查询效率较高。

qq_64431576的博客 1630

平衡二叉树

平衡二叉树简介平衡二叉树(AVL)的定义平衡二叉树的单旋转双旋转代码Node类AVLTree类TestAVLTree类 简介 虽然搜索二叉树在查询,删除,添加上具有一定的优势,但是在一些情况下的效率也特别低。比如下面的这个搜索二叉树: 对于这样的搜索二叉树,我们进行添加,查找,删除时依然很麻烦。因此,我们需要将这样的搜索二叉树转为平衡二叉树。 平衡二叉树(AVL)的定义 首先,平衡二叉树是搜索二...

wuxudong12138的博客 3045
上一篇: 排序算法之链式基数排序(详解)
下一篇: Python----知识点(嵌套列表)
不要清汤锅
博客等级 码龄10年 39粉丝 43原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值