【数据结构】19 平衡二叉树

定义

平衡二叉树又称为AVL树,是具有以下性质的非空搜索树:

  1. 任一结点的左、右子树均为AVL树。
  2. 根节点的左、右子树高度差的绝对值不超过1.

对于二叉树的任一结点T,其平衡因子(BF)定义为BF(T)= h L − h R h_L- h_R hLhR h L h_L hL h R h_R hR分别是T的左、右子树的高度。故AVL树的平衡因子只能在{-1,0,1}中取值。

平衡树的调整

当向一颗AVL树插入新的结点时,该节点的平衡因子可能不在上述集合分为内。 这时需要做出”平衡化“处理,即相应的局部旋转调整,时调整后的树达到平衡。

单旋调整

右单旋(RR)

如图,在第三个节点插入后,根节点mar的平衡因子为-2,树不平衡。需要将树做逆时针旋转。
#在这里插入图片描述
一般情况如下图所示,在A的右节点B的右子树里插入C,使得A的平衡因子变为-2,这时我们需要逆时针旋转相关节点,把B至于A的位置,A置为B的子节点。若B有左子树,将B的左子树置为A的右子树。
在这里插入图片描述

左单旋(LL)

一般情况下,在A节点的左节点B的左子树下插入C节点后导致A节点不平衡,需要顺时针旋转相应节点,将B节点替代A节点位置,将A节点置为B的右节点,若B有右子树,则将B的右子树作为A的左节点。
在这里插入图片描述

双旋调整

LR型

在A节点的左节点B的右子树(以C为根节点)下插入D,称为LR型不平衡。调整方式为将C至于A的位置,A及其右子树调整为C的右子树,C的左子树作为B的右子树,C的右子树作为A的左子树。

事实上,这一调整也可以视为对以B节点为根的子树做一次右单旋,再对以A为根节点的子树做一次左单旋。
在这里插入图片描述

RL型

在A节点的右节点B的左子树(以C为根节点)下插入D,称为RL型不平衡。
调整方法为C替代A的位置,A以及A的左子树作为C的左子树,C的左子树为A 的右子树,C的右子树作为B 的左子树。

事实上,这一调整也可以视为对以B节点为根的子树做一次左单旋,再对以A为根节点的子树做一次右单旋。
在这里插入图片描述

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

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

相关文章

acwing算法提高之搜索--双向广搜BFS与A星算法

目录 1 专题说明2 训练 1 专题说明 本专题用来记录使用双向广搜BFS和A星算法求解的题目。 2 训练 题目1&#xff1a;190字串变换 考点&#xff1a;从起点开始搜&#xff0c;从终点开始搜&#xff0c;即双向广搜。 C代码如下&#xff0c; #include <iostream> #incl…

攻防世界-get_post

题目信息 相关知识 -G&#xff1a;表示GET请求&#xff0c;缺省POST -d参数用于发送 POST 请求的数据体 使用-d参数以后&#xff0c;HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法&#xff0c;因此可以省略-X PO…

使用GPTQ进行4位LLM量化

使用GPTQ进行4位LLM量化 最佳脑量化GPTQ算法步骤1:任意顺序洞察步骤2:延迟批量更新第三步:乔尔斯基重塑 用AutoGPTQ量化LLM结论References 权重量化的最新进展使我们能够在消费级硬件上运行大量大型语言模型&#xff0c;例如在RTX 3090 GPU上运行LLaMA-30B模型。这要归功于性能…

信息收集2.0版本

内网渗透之信息收集 whois查询 1.1.1.1. 在线网站查询 输入相关的域名即可进行查询。 &#xff08;1&#xff09;站长之家&#xff1a;whois域名查询&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;爱站工具网&#xff1a;whois域名查询&#xff1a;站长…

mysql数据库操作小寄巧

目录 json字段查询时间相关只有日期只有时间又有时间又有日期时间比较时间运算 某字段同的取最新数据&#xff08;软性的新数据覆盖旧数据查找&#xff09;sql_modeonly_full_group_by的解决办法优化思路 json字段查询 查询某个json字段&#xff08;xx&#xff09;的某个属性下…

【考研数学】零基础备考全年计划

25考研数学基础差&#xff0c;一定要重视基础的复习&#xff01; 基础不牢&#xff0c;地动山摇&#xff0c;这句话在如今的考研更加贴切 24考研的新形势&#xff1a; 重基础、计算量大、反押题 每一个变化对于基础差的同学都不是好消息。 做过近几年考研真题的人都会发现…

AI时代编程新宠!如何让孩子成为未来的编程大师?

文章目录 一、了解编程的基础概念二、选择适合的编程工具三、激发孩子的兴趣四、注重基础能力的培养五、提供实践机会六、鼓励孩子与他人合作七、持续支持与鼓励《信息学奥赛一本通关》本书定位内容简介作者简介目录 随着科技的迅猛发展&#xff0c;编程已经从一种专业技能转变…

Java实战:PO、VO、DAO、BO、DTO与POJO在何处何场景下精准应用?

引言 在Java企业级应用开发中&#xff0c;良好的架构设计和清晰的数据模型划分是保证代码可读性、可维护性和扩展性的基石。本文将深入剖析Java开发中常见的六大对象模型——PO&#xff08;Persistent Object&#xff09;、VO&#xff08;Value Object&#xff09;、DAO&#…

代码随想录第二十五天 78.子集 90.子集II 491.非递减子序列

LeetCode 78 子集 题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&…

24计算机考研 | 渤海大学

渤海大学丨省重点实验室24年硕士招生&#xff08;调剂&#xff09; 考研调剂招生信息 学校:渤海大学 专业:工学->化学工程与技术->化学工艺 工学->材料科学与工程->材料学 工学->化学工程与技术->应用化学 工学->计算机科学与技术->计算机应用技…

iOS卡顿原因与优化

iOS卡顿原因与优化 1. 卡顿简介 卡顿&#xff1a; 指用户在使用过程中出现了一段时间的阻塞&#xff0c;使得用户在这一段时间内无法进行操作&#xff0c;屏幕上的内容也没有任何的变化。 卡顿作为App的重要性能指标&#xff0c;不仅影响着用户体验&#xff0c;更关系到用户留…

Maven插件之 maven-dependency-plugin 分析依赖复制文件

目录 插件简介使用示例配置依赖&#xff1a;执行 mvn dependency:analyze输出结果&#xff1a; 结尾 插件简介 Apache Maven Dependency Plugin是Apache Maven构建工具的一个插件&#xff0c;用于管理项目的依赖项。 该插件提供了一系列目标&#xff08;goals&#xff09;&…

Linux: shm_xx系列函数使用详解

目录 一、shmget/shmctl/shmat/shmdt函数1、shmget2、shmctl3、shmat4、shmdt5、补充&#xff1a;ftok函数6、示例代码 二、shm_open/shm_unlink函数1、shm_open2、shm_unlink3、示例代码 三、课外阅读 一、shmget/shmctl/shmat/shmdt函数 shm_xx系列函数是用于操作共享内存的一…

SpringBoot整合JdbcTemplate

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合JdbcTemplate 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

设置文字之间的间距应该如何实现

设置文字之间的间距&#xff0c;通常指的是字母之间&#xff08;字符间距&#xff09;或单词之间的间距。在CSS中&#xff0c;这可以通过letter-spacing和word-spacing属性来实现。 字符间距&#xff08;letter-spacing&#xff09; letter-spacing属性用于调整字符之间的间距…

【Git学习笔记】提交PR

step1 克隆一个仓库 git clone .....step2 创建一个分支 (Creating a branch) # 创建并切换到本地新分支&#xff0c;分支的命名尽量简洁&#xff0c;并与解决的问题相关 git checkout -b delete-unused-linkstep3 做出修改 (Make changes) step4 提交修改 # 保存本地修…

DDR5内存相比DDR4内存的优势和区别?选择哪一个服务器内存配置能避免丢包和延迟高?

根据幻兽帕鲁服务器的实际案例分析&#xff0c;选择合适的DDR4与DDR5内存大小以避免丢包和延迟高&#xff0c;需要考虑以下几个方面&#xff1a; 性能与延迟&#xff1a;DDR5内存相比DDR4在传输速率、带宽、工作电压等方面都有显著提升&#xff0c;但同时也伴随着更高的延迟。D…

PostgreSQL开发与实战(4)查询性能Top SQL

作者&#xff1a;太阳 一、查询当前正在运行的Top SQL 查询当前正在运行的会话中耗时最长的Top SQL&#xff0c;where条件可按需修改SELECT pgsa.datname AS database_name, pgsa.usename AS user_name, pgsa.client_addr AS client_addr, pgsa.application_name AS applicat…

你知道什么是回调函数吗?

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

Unity3D外包 北京动点软件:基于U3D开发自动驾驶技术分析

在Unity3D中开发自动驾驶AI是一个充满挑战和潜力的领域。以下是一些关键步骤和考虑因素&#xff1a; 来百度APP畅享高清图片 1. 创建虚拟环境&#xff1a; 使用Unity3D创建一个逼真的虚拟环境&#xff0c;模拟现实世界的道路、交通标志、车辆和障碍物等。 确保场景具有真实的…