AVLTree模拟实现

news2024/9/24 13:23:06

一、常用的搜索逻辑

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.coloradmin.cn/o/985990.html

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

相关文章

修复 ChatGPT 发生错误的问题

目录 ChatGPT 发生错误?请参阅如何修复连接错误! 修复 ChatGPT 发生错误的问题 基本故障排除技巧 检查 ChatGPT 的服务器状态 检查 API 限制 检查输入格式 清除浏览数据 香港DSE是什么? 台湾指考是什么? 王湘浩 生平 …

如何安装安卓(Android 7.0+)CA根证书

简介 写这个教程时,已经是2023年,现在最新的安卓系已经是Android 13 。从Android7.0以后系统不再信任用户的证书,导致我们在使用一些网络调试工具时非常不便,为了解决这个问题,本教程将教你如何一步步操作&#xff0c…

分类预测 | MATLAB实现PCA-LSTM(主成分长短期记忆神经网络)分类预测

分类预测 | MATLAB实现PCA-LSTM(主成分长短期记忆神经网络)分类预测 目录 分类预测 | MATLAB实现PCA-LSTM(主成分长短期记忆神经网络)分类预测预测效果基本介绍程序设计参考资料致谢 预测效果 基本介绍 MATLAB实现PCA-LSTM(主成分长短期记忆神经网络)分类预测。Matlab实现基于P…

Unity中Shader的屏幕坐标

文章目录 前言一、屏幕坐标1、屏幕像素的坐标2、屏幕坐标归一化 二、在Unity中获取 当前屏幕像素 和 总像素1、获取屏幕总像素,使用_ScreenParams参数2、获取当前片段上的像素怎么使用:在片元着色器传入参数时使用 前言 Unity中Shader的屏幕坐标 一、屏幕坐标 1、屏幕像素的坐…

YOLOV7改进-添加CoordConv(坐标卷积)

坐标卷积link 只替换FPN1x1卷积层和检测头中的第一卷积层 1、复制到common文件夹最后 2、做改进对比实验时,不要载入与训练权重 3、yolo.py解析模型里面 4、对yolov7.yaml的配置文件修改 5、对fpn1x1卷积替换

HCIA自学笔记01-冲突域

共享式网络(用同一根同轴电缆通信)中可能会出现信号冲突现象。 如图是一个10BASE5以太网,每个主机都是用同一根同轴电缆来与其它主机进行通信,因此,这里的同轴电缆又被称为共享介质,相应的网络被称为共享介…

使用PHPStudy在本地快速建立网站并实现局域网外访问(无公网IP)

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

前端面试题JS篇(1)

JS 的各种位置,比如 clientHeight,scrollHeight,offsetHeight ,以及 scrollTop, offsetTop,clientTop 的区别 clientHeight:表示的是可视区域的高度,不包含 border 和滚动条offsetHeight:表示可视区域的高度,包含了 b…

React 状态管理 - Redux 进阶(下)提升开发体验

目录 扩展学习资料 Reselect【数据持久化】&Immutable Data【不变数据】方案【解决某些场景重复渲染,重复计算的问题】 /src/reducer/index.js Reselect【 可缓存的筛选项,当数据量大的时候,可以节省diff时间,提升渲染效率…

[B题]2023 年全国大学生数学建模比赛思路、代码更新中.....

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

力扣刷题总结一:模拟+哈希表+双指针+前缀和+滑动窗口

模拟 根据题目意思,捋清整个流程,使用代码去模拟整个流程 例题 种花问题 class Solution:def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:# 模拟,在数组前后各添加1个0,从第1个元素到倒数第2个元素&…

CMake输出编译时间信息

使用CMake进行编译的代码,有时候会希望获得当前代码编译的时间信息,使用CMake提供的函数和宏等功能可以实现这个功能,下面是实现这个功能的一段代码 原文链接: CMake输出编译时间信息

YOLOV7改进-最新的可变形卷积V3

DCNv3 1、先编译这个文件,放到models文件夹下,再编译 2、编译命令 3、复制到common文件最后 4、源文件用的是LN,由于这里用的都是LN,所以也改了 5、原文也是没接激活函数的,但是按照yolo格式来说,会接一个 6、不加激活函数就把act去掉 7、DCNv3只在gpu上运行,所以下…

记一次时间序列算法的自回归预测--ARAutoreg

背景 最近公司给客户要做一些数据的预测,但是客户不清楚哪些做起来比较符合他们的,于是在经过与业务方的沟通,瞄准了两个方面的数据 1.工程数据:对工程数据做评估,然后做预警,这个想法是好的,…

java 咖啡餐厅管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 咖啡餐厅管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

【2023最新版】DataGrip使用MySQL教程

目录 一、安装MySQL 二、安装DataGrip 三、DataGrip使用MySQL 1. 新建项目 2. DataGrip连接MySQL 下载驱动文件 填写root密码 测试 成功 3. DataGrip操作MySQL 四、MySQL常用命令 1. 登录 2. 帮助 3. 查询所有数据库 一、安装MySQL MySQL是一种开源的关系型数据库…

java: 读取snakeyaml-1.26.jar各种jar包时出错; error in opening zip file

可能的问题 jar有问题idea没有权限等等其他问题。但执行后报错就是读取不了,还报error in opening zip file这个错。 解决问题 我的错就是jar包有问题。我先后进行了很多次把jar包位置里的东西全部删除,然后重新maven下载但是不管用。最后从网站上下载…

Kotlin委托Delegate托管by

Kotlin委托Delegate托管by import kotlin.reflect.KPropertyfun main() {var user: String by MyDelegate()user "fly"println(user) }class MyDelegate {private var v: String? nulloperator fun getValue(thisRef: Any?, property: KProperty<*>): Stri…

基于SSM的实验室耗材管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

解决方案 | 电子签让公共事业服务更便捷

为深入贯彻落实国务院关于深化“放管服”改革的号召&#xff0c;各地政府纷纷出台创新举措&#xff0c;优化营商环境&#xff0c;将公共事业服务纳入“一网通办”的范畴。 政策助力&#xff0c; 让公共事业服务实现“足不出户”线上办 上海&#xff1a;上海市大数据中心与国网…