数据结构-二叉树-AVL树(平衡二叉树)

红黑树是平衡二叉树的一个变种。

一、 产生平衡二叉树的原因。

二叉搜索树的问题在于极端场景下退化为类似链表的结构,所以搜索的时间复杂度就变成了O(N)。为了保证二叉树不退化为链表,我们必须保证二叉树的的平衡性。

二叉平衡搜索树就是解决上面的问题的。就是AVL树和红黑树

拓展就是多叉平衡二叉树,那就是B树系列。然后哈希表也可以搜索。

二、二叉平衡树的概念。

当二叉搜索树中插入新节点后,如果能保证每个节点的左右子树高度只差的绝对值不超过1.即可降低树的高度,从而减少平均搜索的长度

一棵AVL树或者空树,或者是具有以下性质的二叉搜索树

它的左右子树都是AVL树,左右子树高度之差(平衡因子)的绝对值不超过1。增删查改:高度次 -O(logN)

三、平衡二叉树的插入。

在插入时,我们可以先构造二叉搜索树。然后再进行平衡操作。

1、新增在左边,parent平衡因子要减减

2、新增在右边,parent平衡因子要加加

3、更新后parent平衡因子==0,说明parent所在的子树的高度不变,不会影响祖先,不用再继续沿着到root的路径往上更新。插入完成

4、更新后parent平衡因子==负1or1,说明parent所在的子树的高度变化,会影响祖先,再继续沿着到root的路径往上更新。

5、更新后parent平衡因子 == 2or负2,说明parent所在的子树的高度变化且不平衡。对parent所在子树进行旋转,让它平衡。插入结束。

 6、更新到根节点也是一种插入结束的情况。那么如何进行平衡呢   

我们这里需要用到旋转平衡。

旋转的时候需要注意的问题。

1、保持它是搜索树

2、变成平衡树且降低整棵树的高度

左单旋:

核心操作就是parent->right = cur->left;cur->left = parent; 

这么做的原因是:cur->left一定比parent要大。然后放在parent的右边是符合搜索树的定义的。

 

注意要修改父亲,还要注意curleft为空的情况。修改平衡因子。还有要把子树跟原来的树连接

如果是独立的树 parent  == _root,进行parent->_parent置空。

如果不是独立的树我们需要对parent->_parent进行保存为ppnode,然后进行判断子树是属于ppnode的左子树还是右子树修改ppnode的左右子树为cur,然后修改cur的父亲指针。

抽象图的解释:

插入之前abc为符合AVL规则的子树。 无论是哪种情况,我们的旋转过程是不变的。插入前的AVL树有无数种情况,我们需要使用抽象图来表示。

双旋:

分为先左后右,先右后左

上面只是先右后左的图片。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职场新人小王的沟通挑战与成长

近日,职场新人小王遇到了一个沟通上的小难题。作为刚刚踏入社会的新鲜人,小王在工作会议上因为一次直接的反馈而无意间触动了同事的敏感神经,导致双方关系稍显紧张。 在一次团队会议上,小王被要求分享对项目进度的看法以及建议。他…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候,重新发送丢失报文的一种机制,它是保证TCP协议可靠性的一种机制。 TCP重传…

9. SVG中的text元素

SVG (Scalable Vector Graphics) 提供了强大的文本渲染能力&#xff0c;其中<text>元素是常用 的文本操作的元素。本文将详细介绍<text>标签的基本使用方法&#xff0c;并展示如何通过<tspan>和<textPath>增强文本的表现力。 <text>标签基础 &…

【PHP【实战项目】系统性教学】——使用最精简的代码完成用户的登录与退出

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MyBatis——MyBatis 参数处理

一、单个简单类型参数 简单类型包括&#xff1a; byte short int long float double char Byte Short Integer Long Float Double Character String java.util.Date java.sql.Date parameterType 属性&#xff1a;告诉 MyBatis 参数的类型 MyBatis 自带类型自动推断机制…

【Linux】centos7安装软件(rpm、yum、编译安装),补充:查找命令的相关文件路径,yum安装mysql

【Linux】技术上&#xff0c;Linux是内核。而术语上&#xff0c;我们通常说的Linux是完整的操作系统&#xff0c;其实称为"Linux发行版"&#xff0c;是将Linux内核和应用系统打包&#xff0c;由不同的发行家族发行了不同版本。Linux发行版众多&#xff0c;主要有RedH…

Debian常用命令:高效管理与运维的必备指南

在Linux世界中&#xff0c;Debian以其稳定性、安全性和开源精神赢得了广大用户的青睐。作为一个基于Linux的操作系统&#xff0c;Debian拥有丰富且强大的命令行工具&#xff0c;这些命令对于系统管理员和开发者来说至关重要。本文将为您介绍一系列Debian系统中的常用命令&#…

基于Javaee的影视创作论坛的设计与实现+vue论文

系统简介 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装影视创作论坛软件来发挥其高效地信息处理的作用&#xf…

询问贴:这要怎么设置捏,寻思着总不该一个一个挖空吧????

这要怎么设置捏&#xff0c;寻思着总不该一个一个挖空吧&#xff1f;&#xff1f;&#xff1f;&#xff1f;

【javaSE】认识异常(1)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

联丰策略股票杠杆股票交易市场突破3100点!A股稳了?

查查配近期,大盘再次来到3100点附近。 重要关口得到有效突破,市场情绪明显升温,甚至有投资者高喊:反转已经在路上!但也有谨慎者认为,市场仍有回调风险,围绕3000点震荡或是接下来的主旋律。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。…

HTML炫酷的相册

目录 写在前面 HTML简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家带来一个炫酷的旋转相册&#xff0c;快来解锁属于你的独家记忆吧&#xff01; HTML简介 HTML&#xff08;全称为超文本标记语言&#xff09;是一种用于创建网页结构和内容的标记语…

Python 编程语言中的 None 到底是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 让我们一起深入了解 Python 中的 None。 什么是 None&#xff1f; 在 Python 编程语言中&#xff0c;None 是一个特殊的常量&#xff0c;它代表了 “无” 或 “没有值”。你可以把它想象成一个空盒子…

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?

日本率先研发成功6G设备&#xff0c;无线数据速率是5G的百倍&#xff0c;这让日本方面兴奋莫名&#xff0c;毕竟日本在科技方面从1990年代以来太缺少突破的创新了&#xff0c;那么日本为何如今在6G技术上能率先突破呢&#xff1f; 日本在1980年代末期达到顶峰&#xff0c;它的科…

电商数据都能采集监测吗

品牌在做市场分析、渠道控价时&#xff0c;一般都需要先采集电商数据&#xff0c;数据的采集&#xff0c;不是只涉及部分平台&#xff0c;分析的准确和控价的全面性&#xff0c;使得数据的要求也会被提高&#xff0c;品牌要能采集不同平台、不同店铺的SKU数据&#xff0c;同时还…

【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架

电子产品量产测试与烧写工具。这是一套软件&#xff0c;用在我们的实际生产中&#xff0c; 有如下特点&#xff1a; 1.简单易用&#xff1a; 把这套软件烧写在 SD 卡上&#xff0c;插到 IMX6ULL 板子里并启动&#xff0c;它就会自动测试各个模块、烧写 EMMC 系统。 工人只要按…

Scratch四级:第08讲 排序算法

第08讲 排序算法 教练&#xff1a;老马的程序人生 微信&#xff1a;ProgrammingAssistant 博客&#xff1a;https://lsgogroup.blog.csdn.net/ 讲课目录 常考的排序算法项目制作&#xff1a;“三个数排序”项目制作&#xff1a;“成绩查询”项目制作&#xff1a;“排序”项目制…

使用LLaMA Factory来训练智谱ChatGLM3-6B模型

使用LLaMA Factory来训练智谱ChatGLM3-6B模型时&#xff0c;以下是一个训练过程&#xff1a; 1. 环境搭建 a. 安装Python和Anaconda 下载并安装适合你操作系统的Python版本&#xff08;推荐Python 3.10或更高版本&#xff09;。安装Anaconda&#xff0c;以管理Python环境和依…

“等保测评通过指南:打造企业安全生态环境“

等保测评&#xff0c;即网络安全等级保护测评&#xff0c;是企业构建安全生态环境的重要环节。以下是通过等保测评的指南&#xff0c;旨在帮助企业打造一个安全的网络环境&#xff1a; 理解等保测评的重要性&#xff1a; 等保测评是确保企业信息系统安全得到有效保护的重要标准…

轻松上手Spring AOP,掌握切面编程的核心技巧

文章目录 AOP 是什么AspectJSpring AOP切点表达式execution()语法结构示例注意事项 通知&#xff08;Advice&#xff09;类型如何使用准备阶段定义切面定义并使用切点测试 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…