AVL树的旋转

2023-10-26

      平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n)

 

      AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。

 

1. LL型

    平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向右旋转一次即可,如图所示,原A的左孩子B变为父结点,A变为其右孩子,而原B的右子树变为A的左子树,注意旋转之后Brh是A的左子树(图上忘在A于Brh之间标实线)

 

 


2. RR型

    平衡二叉树某一节点的右孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向左旋转一次即可,如图所示,原A右孩子B变为父结点,A变为其左孩子,而原B的左子树Blh将变为A的右子树。

 

 

3. LR型

      平衡二叉树某一节点的左孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时需要旋转两次,仅一次的旋转是不能够使二叉树再次平衡。如图所示,在B节点按照RR型向左旋转一次之后,二叉树在A节点仍然不能保持平衡,这时还需要再向右旋转一次。

 

 

4. RL型

      平衡二叉树某一节点的右孩子的左子树上插入一个新的节点,使得该节点不再平衡。同样,这时需要旋转两次,旋转方向刚好同LR型相反。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVL树的旋转 的相关文章

  • npm 和 yarn 命令对照表

    以typescript为例子 初始化项目 npm init yarn init 根据package json安装 npm install yarn 安装具体的包 npm install typescript yarn add typescr
  • Java课题笔记~ ServletConfig

    概念 代表整个web应用 可以和程序的容器 服务器 来通信
  • 2023自动化测试的10个最佳实践(建议收藏)

    虽然大家都知道坚果是非常健康和有营养的 但是 当你尝试吃它的时候 我猜测过程都不会很顺利 现实就是那么相似 我们都知道测试自动化对软件开发有好处 就像坚果对我们的身体一样 很遗憾很多公司在不考虑细微差别的情况下就赶着上线测试自动化 如果您不
  • 中国剩余定理(孙子定理)

    看了很多博客始终没弄明白中国剩余定理到底是怎么算出来的 看孙子的话完全是一脸懵逼啊 还好有这个博客大神的博客Orz 真的讲的特别清晰 点赞点赞 下面会用到的数学公式 如果a b c 那么如果x b c 2 此时x a 2 也就是说除数相等时
  • keil警告 LED.C(38): warning C276: constant in condition expression

    出现此警告一般是由于把if a 3 写成了if a 3 即少写了一个 号 不能作为判断条件
  • 音频处理——详解PCM数据格式

    目录 知识储备 什么是PCM 采样 采样率 重采样 量化 编码 PCM常用指标 PCM数据流 知识储备 音频处理 音频编码原理简介 音频处理 音频处理的基本概念 什么是PCM PCM全称Pulse Code Modulation 翻译一下是
  • yolov5剪枝开源分享

    剪枝分软剪枝和硬剪枝 软剪枝的概念来源于Soft Filter Pruning SFP 这篇论文 下图阐述了软剪枝 SFP 和硬剪枝 Hard Filter Pruning HFP 的区别 它们的不同点是HFP在每个epoch后会将卷积核直
  • 小米路由器R4A(千兆版)固件刷opewrt、刷官方固件

    文章目录 前言 一 刷openwrt 1 获取root权限 2 刷入breed 3 刷入openwtr固件 二 恢复官方固件 1 进入breed界面 2 设置电脑IP 3 固件恢复 三 拯救砖机 总结 前言 最近新买一台小米路由器 老的那台
  • 关于单例模式的一个坑

    问题 有一种情景 单例实例化对象需要在网络通信的通道建立好之后 如果使用饿汉模式 程序开始执行 上来先实例化一个 也不管后面用不用得到 饿汉模式 ifndef SINGLETON define SINGLETON class Singlet
  • python mesa包教程

    python中的mesa包预制了一些类 提供了一些基础模型 可以大大简化abm建模的工作量 在python中实现 也有利于和其它算法相结合 本文是一次作业 按照个人理解把mesa包教程整理 代码压缩成了两大部分 如果是新手上手 建议查看下方
  • 基于js的炫酷动画的代码

  • 提领类型双关的指针将破坏重叠规则——strict-aliasing

    转载请保留本行原始出处声明信息 http www zeali net entry 454 MaDe1nZEAL warning dereferencing type punned pointer will break strict alia
  • 怎么理解离散数据?

    离散数据是指数据值只能取有限的 可数的数值 而不能取到连续的数值 相对的 连续数据可以取到任意数值 离散数据是在一个固定的集合中取值 集合通常是整数集或有限的枚举集 例如 一个人的家庭成员数量就是一个离散数据 它只能取到整数值 如0 1 2
  • JS的类型转换和float取n位小数

    javascript中的变量都是弱类型 所有的变量都声明为var 在类型转换过程中就没有java那么方便 它是通过 parseInt 变量 parseFloat 变量 等方法来进行类型转换的 注意 没有parseDouble 变量 这种类型
  • k8s deployment Strategy 更新策略

    k8s更新策略 https kubernetes io zh docs concepts workloads controllers deployment Strategy spec strategy specifies the strat
  • vue修改富文本中的元素样式

    富文本编辑器目前应用很广泛 而有时候我们想要对其中的一些元素的样式进行修改 就会遇到问题 首先 直接修改是不可行的 因为是用v html标签进行渲染的 无法直接获取到 在修改的时候 一般是按标签进行修改 当然 也可以按class和id等 这
  • python:从键盘输入学生的成绩,转换成 5 个等级输出。A(90~100),B(80~89),C(70~79),D(60~69),E(0~59)。试用嵌套分支结构实现。

    grades eval input 请输入你的成绩 if 90 lt grades lt 100 print A elif 80 lt grades lt 90 print B elif 70 lt grades lt 79 print C
  • 前置机

    前置机这个概念一般在银行 券商 电信运营商那里用的比较多 这些地方都有很多后台核心处理系统 对外提供各种接口服务 如果我有某种业务接口需要跟他们的后台系统打交道 要从我们的外部网络访问他们的后台系统 这些单位是绝对不允许的 这个时候 他们要
  • Unity中协程与线程的区别

    本文转载自 https blog csdn net qq 25122429 article details 80481443 协同程序 coroutine 与多线程情况下的线程比较类似 有自己的堆栈 自己的局部变量 有自己的指令指针 IP

随机推荐

  • 【编程之路】面试必刷TOP101:贪心算法(95-96,Python实现)

    面试必刷TOP101 贪心算法 95 96 Python实现 95 分糖果问题 小试牛刀 95 1 贪心思想 要想分出最少的糖果 利用贪心思想 肯定是相邻位置没有增加的情况下 大家都分到1 相邻位置有增加的情况下 分到糖果数加1就好 什么情
  • Java-内部类

    Java 内部类 1 概念 Java中允许将一个类A声明在另外一个类B中 则类A就是内部类 类B 就称为外部类 内部类的分类 成员内部类 一方面作为外部类的成员 可以调用外部类的结构 可以被static修饰 可以被四种不同的权限修饰符 pu
  • 在手机上运行Python--安卓linux终端Termux

    今天突发奇想 想找一种在手机上运行Python的工具 于是发现了这个安卓端的linux终端 Termux 可以在手机上实现一个微型的linux终端 网上已经有不少教程了 我在这里做一下汇总 1 安装Python以及常用的package nu
  • Python+OpenCV3简单手势识别

    文章目录 安装相关库 原理简述 代码 效果实现 今天教大家一个有趣的玩法 如何利用Python opencv3实现简单的手势识别 当然网上也有相关教程 但绝大多数给出的代码拿来之后你是不能直接用的 这对于拿来主义的同学来说简直太 禽兽 了
  • python rpy2_Python&R语言-rpy2使用示例

    前言 Python编程灵活方便 R的模型方法众多 如何将两者结合起来 发挥更大的作用 值得探索 Python可以直接调用R的函数 R是开源项目 肯定会有一些第三方库实现Python与R互通 需要在python中调用R 实在是一种无奈的选择
  • vue3+TSX+element-plus(DateTimePicker)做一个时间范围选择器

    element plus包括element ui支持时间范围选择 把type指定成datetimerange就行了 但是它不支持单个选择 也许unlink panels这个配置有用 但我是用TSX写的 传了个true进去没用 怎么试都不行
  • 20张图带你了解JVM运行时数据区(上)

    我们的JVM系列已经断更好几天了 小伙伴们在后台疯狂私信阿Q 想看后续内容 今天它来了 相信大家在上篇文章中已经对类加载子系统有了清晰的认识 接下来就让我们来揭开 运行时数据区 的神秘面纱吧 运行时数据区总览 内存是非常重要的系统资源 是硬
  • GC overhead limit exceeded问题

    Java运行时环境内置了 垃圾收集 GC 模块 上一代的很多编程语言中并没有自动内存回收机制 需要程序员手工编写代码来进行内存分配和释放 以重复利用堆内存 在Java程序中 只需要关心内存分配就行 如果某块内存不再使用 垃圾收集 Garba
  • vue watermark水印添加

    vue 水印实现 Vue项目在页面添加水印功能 不允许操作dom关闭水印 1 添加watermark dom插件 npm i watermark dom save 引用 watermark dom import watermark from
  • lsqcurvefit函数的基本用法

    本文讲解lsqcurvefit函数的基本用法 一 lsqcurvefit函数的简单使用格式 x lsqcurvefit fun x0 xdata ydata x resnorm lsqcurvefit fun x0 xdata ydata
  • 线程安全性的基本概念

    线程安全性 我们总是说要编写线程安全的代码 有时候也会讨论某个类是不是线程安全的 那到底什么是线程安全性呢 网上有很多说法 可以被多个线程调用 并且线程之间不会出现错误的交互 多个线程调用时 不需要做额外的动作等等 但这话 明明什么都说了
  • 力扣刷题-128.最长连续序列、并查集

    一 并查集 顾名思义 并 就是合并 查 就是查找 集 就是集合 并查集是一种树形的数据结构 支持以下两种操作 查找 确定某个元素处于哪个子集 合并 将两个子集合并成一个集合 初始化 集合就是一些具有相同特征的元素构成的圈子 然后用其中某个元
  • vue3中定义的对象再次赋值,页面不会自动更新解决方法

    第一种方法 将reactive换成ref 即可实现页面随时刷新 export default components HelloWorld name App setup let person ref const getPerson data
  • Umi 内使用mock

    在mock文件夹下创建stu js 在mock文件夹下创建stu js 代码如下 利用mock js库 增强mock数据能力 首先先安装 yarn add mockjs 或者 npm i mockjs
  • 【整理九】

    目录 1 说说你对递归的理解 封装一个方法用递归实现树形结构封装 2 Link和 import有什么区别 3 什么是FOUC 如何避免 4 说说你对预编译器的理解 5 shouldComponentUpdate 的作用 6 概述下 Reac
  • 计算机2.0培训心得,2020信息技术2.0培训心得

    时代的车轮滚滚 把我们带到信息高速路 信息技术迅猛发展令我们猝不及防 也惊喜万分 它渗透到社会生活角角落落 校园更是如此 传统教育教学模式 教学方式和教学手段等统统被打破 我们甚至措手不及 今年 我幸运参加2020年年底为期7天的中小学信息
  • Typora自定义命令上传图片到服务器

    Typora自定义命令上传图片到服务器 缘由 因为平时喜欢用Typora写文档 markdown也比较方便复制到各个网站上去展示 但是markdown复制的文件之前一直都是保存在本地 md文件复制给别人或者复制到其他博客上会导致图片找不到或
  • 6.9行为型---访问者模式

    在现实生活中 有些集合对象中存在多种不同的元素 且每种元素也存在多种不同的访问者和处理方式 例如 公园中存在多个景点 也存在多个游客 不同的游客对同一个景点的评价可能不同 医院医生开的处方单中包含多种药元素 査看它的划价员和药房工作人员对它
  • datatables完整的增删改查

    1 需要指定datatables的ID 1
  • AVL树的旋转

    平衡二叉树在进行插入操作的时候可能出现不平衡的情况 AVL树即是一种自平衡的二叉树 它通过旋转不平衡的节点来使二叉树重新保持平衡 并且查找 插入和删除操作在平均和最坏情况下时间复杂度都是O log n AVL树的旋转一共有四种情形 注意所有