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

高阶数据结构-----三种平衡树的实现以及原理(未完成)

TreeMap和TreeSet的底层实现原理就是红黑树

一)AVL树:

1)必须是一棵搜索树:前提是二叉树,任取一个节点,它的左孩子的Key小于父亲节点的Key小于右孩子节点的Key,中序遍历是有序的,按照Key的大小进行排列,高度平衡的二叉搜索树,他的左右子树都是二叉搜索树

          AB             C
甲    乙      丙      丁

我们在这里面得出一个结论: Key(甲)<Key(B)<Key(乙)<Key(A)<Key(丙)<Key(C)<Key(丁)

2)必须是一颗平衡树:任意树中的节点,要求结点左子树的高度和结点右子树的高度差的绝对值不可以超过1,左右子树的高度差不能超过1;

平衡因子=左子树的高度-右子树的高度,我们在AVL树中任取一个节点,他的平衡因子只能是-1,1,0;

3)AVL树任意一颗以根节点的左右子树的高度差的绝对值不超过1,所以AVL树尽量保证左树和右树的高度是一致的,那么这个时候再次进行数据查找的时间复杂度就是O(logN)

4)当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过,(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度

二)AVL树的查找与插入:如果插入失败了,那么只有一种情况那么就是当前我要插入的数值在原来的树中已经有了

随着节点的插入,导致了平衡因子发生了变化,所以我们要进行平衡因子的调节

1)如图所示,在上面这张图中当我们想要插入10这个节点的时候,parent此时指向的是9这个节点,此时10插入到了9的右子树,那么9的平衡因子++,此时parent的平衡因子是1,但是只能证明当前这棵树已经平衡了,还是需要进行向上调整

2)此时如果插入的数据是8.5,那么此时插入到的位置是9的左边,此时parent的平衡因子是-1,此时也是只能证明当前这棵树平衡了,还是需要继续向上调整的;

3)但是如果此时我们进行插入的数据是7.5,那么此时parent节点指向8这个位置,成功插入7.5这个数据之后发现parent的平衡因子变成0,此时就不需要向上调整了

当parent.bf==2的时候,说当前这棵树已经不平衡了,说明此时右树高,说明要降低右树的高度,增加左树的高度,所以要进行旋转

当parent.bf==-2的时候,说当前这棵树已经不平衡了,说明此时左树高,说明要降低左树的高度,增加右树的高度,所以要进行旋转

左旋说明右树高,右旋说明左树高

一)parent节点的平衡因子是2,current节点存储的平衡因子是1:

二)parent结点的平衡因子是2,current的节点的平衡因子是-1;
三)parent结点存储的平衡因子是-2,current存储结点的平衡因子是-1;

1)这个旋转也叫做右单旋,除了修改指针的指向还有修改平衡因子,右单旋就是自己变成左孩子的右孩子

2)但是代码写到这里面还是存在着一定问题,可能当前的parent是上面某一棵树的左子树,也有可能是某一棵树的右子树

3)最后修改各个节点的平衡因子

4)但是上面的所有情况都考虑得比较不错了,但是最终的代码还是存在着一定的瑕疵

四)parent存储结点的平衡因子是-2,current存储结点的平衡因子是1;  

右单旋:(新节点插入较高左子树的右侧)

左旋——自己变为右孩子的左孩子;右旋——自己变为左孩子的右孩子

 

 在上面的代码中,我们就成功地进行了右旋;

左单旋:新节点插入较高右子树的右侧

左右双旋:新节点插入到较高左子树的右侧

解决方案:先针对parent的左子树进行左旋,再根据parent结点进行右旋,再进行更新平衡因子的变化

右左双旋:新节点插入到较高右子树的左侧

验证AVL树:中序遍历有序况且是平衡二叉树

相关文章:

高阶数据结构-----三种平衡树的实现以及原理(未完成)

TreeMap和TreeSet的底层实现原理就是红黑树 一)AVL树: 1)必须是一棵搜索树:前提是二叉树&#xff0c;任取一个节点&#xff0c;它的左孩子的Key小于父亲节点的Key小于右孩子节点的Key&#xff0c;中序遍历是有序的&#xff0c;按照Key的大小进行排列&#xff0c;高度平衡的二叉…...

北斗高精度组合导航终端

UWB&#xff08;Ultra-Wideband&#xff09;、卫星定位&#xff08;GNSS&#xff09;&#xff0c;以及IMU&#xff08;Inertial Measurement Unit&#xff09;的组合定位系统结合了多种传感器和定位技术&#xff0c;以提供高精度、高可靠性的位置估计。这种组合定位系统在各种应…...

低代码平台是否能替代电子表格?

在计算机技术普及之前&#xff0c;会计、助理或者是销售人员&#xff0c;都需要用纸和笔来记录和维护每一笔交易。计算机技术兴起之后&#xff0c;一项技术发明——电子表格的出现改变了低效的状况。电子表格的第一个版本出现在1977年&#xff0c;一个名为“VisiCalc”的程序。…...

qt多个信号如何关联一并处理

主要方法&#xff1a; 首先&#xff0c;需要创建一个包含自定义信号和槽的Qt类。假设要创建一个名为MyObject的类&#xff0c;并在其中定义一个自定义信号和一个槽。这个类的头文件可能如下所示&#xff1a; #ifndef MYOBJECT_H #define MYOBJECT_H#include <QObject>c…...

【python爬虫】12.建立你的爬虫大军

文章目录 前言协程是什么多协程的用法gevent库queue模块 拓展复习复习 前言 照旧来回顾上一关的知识点&#xff01;上一关我们学习如何将爬虫的结果发送邮件&#xff0c;和定时执行爬虫。 关于邮件&#xff0c;它是这样一种流程&#xff1a; 我们要用到的模块是smtplib和emai…...

2023数学建模国赛C题思路--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进…...

vue2与vue3的使用区别

1. 脚手架创建项目的区别&#xff1a; vue2: vue init webpack “项目名称”vue3: vue create “项目名称” 或者vue3一般与vite结合使用: npm create vitelatest yarn create vite2. template中结构 vue2: template下只有一个元素节点 <template><div><div…...

Apache httpd漏洞复现

文章目录 未知后缀名解析漏洞多后缀名解析漏洞启动环境漏洞复现 换行解析漏洞启动环境漏洞复现 未知后缀名解析漏洞 该漏洞与Apache、php版本无关&#xff0c;属于用户配置不当造成的解析漏洞。在有多个后缀的情况下&#xff0c;只要一个文件含有.php后缀的文件即将被识别成PHP…...

【漏洞复现】时空智友企业流程化管控系统文件上传

漏洞描述 通过时空智友该系统,可让企业实现流程的自动化、协同上提升、数据得洞察及决策得优化,来提高工作效率、管理水平及企业的竞争力。时空智友企业流程化 formservice接口处存有任意文件上传漏洞,未经认证得攻击者可利用此接口上传后门程序,可导致服务器失陷。 免责…...

elasticsearch的DSL查询文档

DSL查询分类 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如&#xff1a;match_all 全文检索&#xff08;full text&#xff09;查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引库中匹配。例如&#xff1a; match_query multi_ma…...

IP地址、子网掩码、网络地址、广播地址、IP网段

文章目录 IP地址IP地址分类子网掩码网络地址广播地址IP网段 本文主要讨论iPv4地址。 IP地址 实际的 IP 地址是一串32 比特的数字&#xff0c;按照 8 比特&#xff08;1 字节&#xff09;为一组分成 4 组&#xff0c;分别用十进制表示然后再用圆点隔开&#xff0c;这就是我们平…...

ffmpeg-android studio创建jni项目

一、创建native项目 1.1、选择Native C 1.2、命名项目名称 1.3、选择C标准 1.4、项目结构 1.5、app的build.gradle plugins {id com.android.application }android {compileSdk 32defaultConfig {applicationId "com.anniljing.ffmpegnative"minSdk 25targetSdk 32…...

智慧公厕是将数据、技术、业务深度融合的公共厕所敏捷化“操作系统”

文明社会的进步离不开公共设施的不断创新和提升。而在这些公共设施中&#xff0c;公共厕所一直是一个备受关注和改善的领域。近年来&#xff0c;随着智慧城市建设的推进&#xff0c;智慧公厕成为了城市管理的重要一环。智慧公厕不仅仅是为公众提供方便和舒适的便利设施&#xf…...

JVM中JAVA对象和数组内存布局

对象 数组 在Java中&#xff0c;所有的对象都是一种特殊的数组&#xff0c;它们的元素可以是基本数据类型、其他对象引用或者其他任何类型。Java对象和数组的内存布局包含以下部分&#xff1a; 1.对象头&#xff08;Object Header&#xff09; 每个Java对象都有一个对象头&am…...

【2023年数学建模国赛】赛题发布

2023数学建模国赛赛题已经发布啦&#xff0c;距离赛题发布已经过去三个小时了&#xff0c;大家是否已经确定题目呢&#xff1f;学姐后续会持续更新赛题思路与代码~...

Java HashMap源码学习

Java HashMap源码学习 基本使用 包含创建&#xff0c;添加&#xff0c;删除&#xff0c;迭代&#xff0c;打印 val map java.util.HashMap<Int, Int>() map.put(1, 2) map.put(2, 2) map.put(3, 2) map.remove(1) map.forEach {println("it.key${it.key}, it.va…...

Gin中用于追踪用户的状态的方法?!!!

Gin中的Cookie和Session的用法 文章目录 Gin中的Cookie和Session的用法介绍Cookie代码演示 Session代码展示 介绍 cookie 和 session 是 Web 开发中常用的两种技术&#xff0c;主要用于跟踪用户的状态信息。 Cookie func (c *Context) Cookie(name string, value string, max…...

HTTP代理与HTTPS代理在工作流程上有哪些区别

HTTP代理和HTTPS代理都是常见的代理技术&#xff0c;可以实现隐藏客户端IP地址、突破网络封锁、加速网站访问、过滤网络内容等功能。本文将介绍HTTP代理和HTTPS代理在工作流程上的区别。 HTTP代理的工作流程 客户端向代理服务器发送HTTP请求 当客户端需要访问某个网站时&#x…...

Docker从认识到实践再到底层原理(二-2)|Namespace+cgroups

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

算法的概述

算法分析&#xff1a; 解决同一问题的算法可以有多种。 我们希望从中选出最优的算法&#xff0c;效率高或者存储空间小。为此&#xff0c;需要对算法进行评估&#xff0c;分析。 通常考虑两个度量&#xff1a; 1、 时间复杂度&#xff1a;算法运行时需要的总步数&#xff0c…...

菜鸟教程《Python 3 教程》笔记(19):错误与异常

菜鸟教程《Python 3 教程》笔记&#xff08;19&#xff09; 19 错误和异常19.1 assert&#xff08;断言&#xff09;19.2 异常处理19.2.1 try/except19.2.2 try/except...else19.2.3 try-finally 语句 19.3 抛出异常19.4 用户自定义异常19.5 清理行为19.5.1 定义清理行为19.5.2…...

空气净化器上亚马逊美国站需要办理什么认证?空气净化器UL867测试报告如何办理?

空气净化器又称“空气清洁器”、空气清新机、净化器&#xff0c;是指能够吸附、分解或转化各种空气污染物&#xff08;一般包括PM2.5、粉尘、花粉、异味、甲醛之类的装修污染、细菌、过敏原等&#xff09;&#xff0c;有效提高空气清洁度的产品&#xff0c;主要分为家用 、商用…...

SpringBoot的测试方案

写完代码后&#xff0c;测试是必不可少的步骤&#xff0c;现在来介绍一下基于SpringBoot的测试方法。 基于SpringBoot框架写完相应功能的Controller之后&#xff0c;然后就可以测试功能是否正常&#xff0c;本博客列举MockMvc和RestTemplate两种方式来测试。 准备代码 实体类…...

华为OD机考算法题:字符串解密

目录 题目部分 解读与分析 代码实现 题目部分 题目字符串解密题目说明给定两个字符串string1和string2。 string1是一个被加扰的字符串。string1由小写英文字母&#xff08;a~z&#xff09;和数字字符&#xff08;0~9&#xff09;组成&#xff0c;而加扰字符串由0~9、a~f 组…...

unity 锚点设置

锚点聚合情况&#xff1a; 一个2d物体的位置 pos x pos y 是中心点相对于锚点的偏移量&#xff1a; 中心点就是位置。 按住shift 锚点和中心点都会被设置&#xff1a; 按住Alt&#xff1a; 同时按住shift和alt &#xff1a; 中心点 锚点 UI元素在对应的位置上。 锚点拉伸情况…...

Hadoop:HDFS--分布式文件存储系统

目录 HDFS的基础架构 VMware虚拟机部署HDFS集群 HDFS集群启停命令 HDFS Shell操作 hadoop 命令体系&#xff1a; 创建文件夹 -mkdir 查看目录内容 -ls 上传文件到hdfs -put 查看HDFS文件内容 -cat 下载HDFS文件 -get 复制HDFS文件 -cp 追加数据到HDFS文件中 -appendTo…...

自定义封装异步任务组件,实现FutureTask功能

FutureTask 在 JDK1.8 后的异步编排API中的CompletableFuture&#xff0c;提供了 异步任务的成功回调、异常回调。 public class FutureTaskTest {public static void main(String[] args) throws Exception {CompletableFuture<String> future CompletableFuture.sup…...

【区块链 | IPFS】IPFS节点搭建、文件上传、节点存储空间设置、节点上传文件chunk设置

一、创建ipfs节点 通过ipfs init在本地计算机建立一个IPFS节点 本文有些命令已经执行过了&#xff0c;就没有重新初始化。部分图片拷贝自先前文档&#xff0c;具体信息应以实物为准 ipfs init initializing IPFS node at /Users/CHY/.ipfs generating 2048-bit RSA keypair.…...

【autodesk】浏览器中渲染rvt模型

使用Forge完成渲染 Forge是什么 为什么能够渲染出来rvt模型 Forge是由Autodesk开发的一套云端开发平台和工具集。在Forge平台中&#xff0c;有一个名为"Model Derivative"的服务&#xff0c;它可以将包括RVT&#xff08;Revit&#xff09;在内的多种BIM&#xff08…...

Python超入门(1)__迅速上手操作掌握Python

# 1.第一个代码&#xff1a;输出语句 # 1.第一个代码&#xff1a;输出语句 print("My dogs name is Huppy!") print(o----) print( ||| ) print("*" * 10) """ 输出结果&#xff1a; My dogs name is Huppy! o----||| ********** "&…...

用jquery做的书籍网站/n127网推广

有人是为了从做报表中解放出来&#xff0c;有人是为了实现更业务化的个性化报表&#xff0c;有人只懂得用Excel且确实通用性强&#xff0c;有人是因为无BI系统支持(或BI不够业务化)……确实有n种理由&#xff0c;最终导向了这个选择--自己用Excel来制作数据分析模板用一个平凡的…...

wordpress主题首页怎么修改/网站百度关键词seo排名优化

今天谈下在Silverlight中如何进行异常处理&#xff0c;用WCF Ria Service在服务器端记录异常日志&#xff0c;后台用log4net组件处理logging&#xff0c;前台给用户弹出一个友好的框&#xff0c;用户也可以在客户端保存异常log到本地&#xff0c;就这么点内容。废话不说&#x…...

百浪科技做网站怎么样/互联网十大企业

摘要&#xff1a;信息技术高度发达的今天,新闻业已经在互联网行业中占越发主导地位。而我们的生活也跟新闻息息相关&#xff0c;尤其是在高度发达的精神文化社会&#xff0c;人们对于电影的喜爱也越来越热衷&#xff0c;但想挑到自己喜爱的片子&#xff0c;就需要影评网站来筛选…...

中国建设银行招标网站/企业营销策划合同

前几天在读者群里&#xff0c;大家针对看书好、还是看视频好、还是自学好&#xff0c;展开了激烈的讨论&#xff0c;场面一度失控。作为群主的我&#xff0c;为了缓和气氛&#xff0c;选择了和稀泥&#xff0c;我说都好&#xff0c;并且拿我自己举了例子。说着说着我发现&#…...

如何网站点击率/如何在百度搜索排名靠前

逆元主要用于除法取余的情况下&#xff1a; 设 inv[b] 是 b 的逆元, 那么 (a/b) %p (a*inv[b]) %p inv[b]是b的逆元的前提是gcd(b,p)1,此时逆元存在 &#xff08;在mod p情况下的逆元&#xff09;定义&#xff1a;x是a 的逆元则ax1&#xff08;modp&#xff09;其中x <p…...

顺德门户网站建设公司/crm系统成功案例分享ppt

1. 从系统加电起所执行程式的顺序为&#xff1a;ROM BIOS bootsect.S setup.S head.S main.c2. ROM BIOS当PC机加电后&#xff0c;80x86结构的CPU将自动进入实模式&#xff0c;并从地址0xFFFF0开始自动执行某些系统的检测。并在物理地址0处开始初始化中断向量。…...