当前位置: 首页 > news >正文

右单旋的具体情况

右单旋的具体情况

  • 1、h为0
  • 2、h为1
  • 3、h为2
  • 4、h为3

在“AVL树的模拟实现”一文中,我们学习到旋转调整方法的时候,使用的需要旋转调整的示例,都是一些抽象的二叉搜索树:

如图的树a, b, c都是抽象的树。插入节点(红色方框)之前,三个树的高度都是h。

我们设下图的树为原树,然后对h做一点讨论,进而展示出具体的需要旋转调整的例子的个数。

1、h为0

h为0,那就只剩下节点⑩和节点⑤了。我们不可能在一个nullptr之下再插入一个节点,所以h为0,就没有需要右单旋的情况。

2、h为1

h为1,就是一个节点是一个树:


此时,节点④是树a,节点⑨是树b,节点15是树c。

要想构成一个需要右单旋的不平衡二叉搜索树,我们就要让树a的高度增加,所以我们可以在节点④的两边插入:


所以h为1,有两种情况需要右单旋。

3、h为2

h为2的树有三种:

对于原树,⑤节点的左边必须入树1这个满二叉树。如果入了树2或树3,那么就会有两种情况:

  • 新插入节点,不会使得原树的平衡被破坏
  • 新插入节点,⑤节点的左子树自己就需要旋转


而⑤节点的右边,和⑩节点的右边,三种h为2的树都可以选。

⑤节点的右边,和⑩节点的右边三种树都可以选,那么就有:3 * 3 = 9种情况。

而对于⑤左边的满二叉树,插入一个节点,可以插在4个地方:

那么一共有:4 * 9 = 36种情况。

4、h为3

我们必须明确,原树的节点⑤的左边,必须插入:

  • 满二叉树
  • 前两层符合满二叉树,第三层有3个节点

否则插入节点后,就会出现后无需旋转,或子树自身旋转的情况。

而原树节点⑤的右边,节点⑩的右边,插入的h为3二叉树,其前两层也必须是满的,否则也会出现插入后无需旋转,或子树自身旋转的情况。

h为3的二叉树:


满二叉树:1种情况

树-C-n-4:

  • 第三层有一个节点:C 4 1 = 4 C_4^1=4C41=4
  • 第三层有两个节点:C 4 2 = 6 C_4^2=6C42=6
  • 第三层有三个节点:C 4 3 = 4 C_4^3=4C43=4

那么树-C-n-4:共有14种情况

那么对于原树,树c(节点⑩的右边)和树b(节点⑤的右边)就各有15种情况,组合起来有:15 * 15 = 225种情况。

对于树a,如果树a是满二叉树,那么就有8个插入位置,可以构成原树需要右单旋的情况:

如果树a是由满二叉树缺了一个节点得来的,那么插入节点,必须插入到树a第三层的相邻两个节点的其中之一的下面:


插入到下面,有4种情况;h为3的满二叉树缺一个节点的情况,也为C 4 3 = 4 C_4^3=4C43=4种。

所以节点的插入,有8 + 4 * 4 = 24种。

那么h为3,最终有:225 * 24 = 5400种情况,需要原树进行右单旋。

所以我们举出具体的例子来演示右单旋,是有很多具体例子的。

http://www.jsqmd.com/news/813616/

相关文章:

  • 别再手动调格式了!用Writage+Pandoc,5分钟搞定Word转Markdown(保姆级避坑指南)
  • 【无人船】A星算法融合DWA限制内陆水域无人水型导航路径规划【含Matlab源码 15445期】
  • M4Markets:技术架构稳健性的多角度观察
  • 你的项目适合三菱还是西门子?一篇文章告诉你
  • 豆包输入法Mac版正式上线,所有人都该试试AI语音输入了。
  • C语言结构体从入门到实战:手把手教你玩转复杂数据(附赠避坑指南)
  • Lumberjack 暗色主题:提升开发效率的配色方案与多平台配置指南
  • 如何快速备份与恢复微信聊天记录:Mac用户的数据保护终极指南
  • AntiDupl.NET终极指南:智能重复图片检测与文件管理完整教程
  • Sticky便签:Linux桌面笔记管理的终极解决方案
  • 永久解锁Cursor Pro功能:3步实现AI编程助手无限使用方案
  • 瞎指挥:从大宋战场到职场,谁在绑住内行的手脚
  • 通过curl命令直接测试Taotoken聊天接口的连通性
  • ClawPaw:将Android手机转化为AI智能体的可编程执行节点
  • Cursor Pro破解教程:3种方法实现AI编程助手永久免费使用完整指南
  • ARM中断控制器架构演进与Redistributor关键设计
  • 一二三四五六年级下册语文生字表组词带拼音部首笔顺人教版
  • 如何通过phpMyAdmin给WordPress所有用户发送全站通知_系统表插入
  • 解决腾讯云服务器上 Git 克隆超时与 Docker 镜像拉取失败问题
  • 在线考试系统如何实现随机组卷
  • iOS开发者必备:AI编码助手技能库提升Swift开发效率
  • PHP集成Fathom会议记录AI实现语音转写【技巧】
  • 存智赋能 共筑AI存储新生态,移动云聚力技术创新夯实AI数据基石
  • 【翼型】涡板块法计算二维翼型【含Matlab源码 15441期】
  • 终极指南:3步搭建开源游戏串流服务器Sunshine,解锁跨设备游戏自由 [特殊字符]
  • Redis如何通过Lua减少网络通信开销
  • OpenClaw机器人项目工作空间:一键搭建开发环境与模块化实践
  • html标签如何提交表单_button type=submit作用【详解】
  • 好风凭借力,送我上青云
  • PHP文件上传绕过新思路:用.htaccess+GIF89a头绕过exif_imagetype检测的完整操作指南