AVLTree模拟实现

一、常用的搜索逻辑

1、暴力搜索 O(N)

2、二分搜索

前提是有序,可以先用O(NlogN)排序一次,后续每次查找都是logN。

缺点:快排需要容器有随机访问功能,即为顺序表等。

如果不仅要搜索,还要插入删除,此时挪动数据为0(N)

3、二叉搜索树

搜索、插入、删除均为logN

缺点:极端情况下退化为类似链表,变为O(N)

4、二叉平衡搜索树(AVL、RBT)

logN

5、多叉平衡搜索树(B树)

6、哈希表(Hash)

二、AVL树(高度平衡二叉搜索树)

平衡因子版本:bf = H(Right) - H(Left)

正常情况下,bf的取值为  -1  0  1

bf 为0时,为满二叉树  N = 2^h-1个

三、Insert/更新平衡因子

1、作为搜索树的Insert部分

结点的定义:

先找到要插入的位置

插入在左子树还是右子树

三叉链要记得更新_parent指针

2、更新平衡因子

或者parent更新到nullptr也结束。

四、旋转

        

旋转完,parent->_bf变为0,即停止更新,break即可。

插入新节点,会一路更新平衡因子,最后只需更新parent->_bf = cur->_bf =0。

1、RotateL

c只能是z,否则会提前停止更新 c所在子树的bf为0

或提前旋转:c所在子树bf为+-2

中间判断的是parent是否为root或者ppnode是否为nullptr

2、RotateR

中间判断的是parent是否为root或者ppnode是否为nullptr

3、RotateRL        

先对 nodeR右旋,然后对parent左旋

最后根据RL的_bf调整平衡因子

4、RotateLR

先对L左旋,然后对parent右旋

最后根据LR的_bf调整平衡因子

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

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

相关文章

Kubernetes(k8s)部署高可用多主多从的Redis集群

Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建(推荐) 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…

解释模块化开发及其优势,并介绍常用的模块化规范。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 模块化开发⭐ 模块化开发的优势⭐ 常用的模块化规范⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是…

FPGA可重配置原理及实现(1)——导论

一、概述 可重配置技术是Xilinx提供的用来高效利用FPGA设计资源实现FPGA资源可重复利用的最新的FPGA设计技术,这种技术的发展为FPGA应用提供了更加广阔的前景。 术语“重构”是指FPGA已经配置后的重新编程。FPGA的重构有两种类型:完全的和部分的。完全重…

Kafka3.0.0版本——消费者(消费者组原理)

目录 一、消费者组原理1.1、消费者组概述1.2、消费者组图解示例1.3、消费者组注意事项 一、消费者组原理 1.1、消费者组概述 Consumer Group(CG):消费者组,由多个consumer组成。形成一个消费者组的条件,是所有消费者…

Docker使用及本地Yolov5打包教程

1. Docker的安装 注意:官方也提供了直接Pull Yolov5的渠道: docker pull ultralytics/yolov5 详见:https://hub.docker.com/r/ultralytics/yolov5 --------------------------------------------------以下正文------------------------…

正中优配:散户怎么实现T+0?散户在股市上怎么变相T+0?

T0是指当天买入的标的物,在当天就能卖出的买卖方式,其中,在a股市场上,散户能够通过一些办法直接地完成T0买卖方式,接下来,正中优配为大家预备了相关内容,以供参阅。 散户在股票市场上&#xff0…

使用SpringCloud Eureka 搭建EurekaServer 集群- 实现负载均衡故障容错【上】

😀前言 本篇博文是关于使用SpringCloud Eureka 搭建EurekaServer 集群- 实现负载均衡&故障容错,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可…

【huggingface】数据集及模型下载并保存至本地

目录 数据集ChnSentiCorppeoples_daily_ner 模型bert-base-chinesehfl/rbt3t5-baseopus-mt-zh-enChinese_Chat_T5_Base 环境:没有代理,无法访问部分国外网络 数据集 正常情况下通过load_dataset加载数据集;save_to_disk保存至本地&#xff1b…

Docker构建Springboot项目,并发布测试

把SpringBoot项目打包成Docker镜像有两种方案: 全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地址,在项目里配置好Dockerfile文件,这样可以直接在idea中打包好后自动上传到镜像仓库&#xff0c…

别来!这所院校性价比太低了!

一、学校及专业介绍 浙江工商大学(Zhejiang Gongshang University),简称“浙商大”(ZJSU),坐落于浙江省杭州市,是中华人民共和国教育部、中华人民共和国商务部和浙江省人民政府共建的浙江省重点…

【数学建模竞赛】Matlab逻辑规则,结构基础及函数

逻辑基础 逻辑变量 在Matlab中,逻辑变量是一种特殊类型的变量,用于表示逻辑值。逻辑变量只有两个可能的值:true(真)和false(假)。在Matlab中,我们可以使用0和1来表示逻辑变量的值。…

Windows模拟器推荐

物是人非事事休,欲语泪先流 Windows模拟器推荐 如果你需要在 Windows 操作系统之外运行 Windows 应用程序或测试不同版本的 Windows,有几个 Windows 模拟器和虚拟机软件可供选择。以下是一些常用的 Windows 模拟器和虚拟机软件: VirtualBox&…