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

【黑皮书】 AVL树

目录

前言

一  AVL树的介绍

二  单旋转

二  双旋转 

总结


前言

AVL树的学习


一  AVL树的介绍

AVL树是带有平衡条件的二叉查找树,这个平衡条件要持续保持,而且必须保证树的深度为O(log(N))最简单的想法就是要求左右子树具有相同的高度

一棵AVL树是其每一个节点的左子树和右子树的高度相差1的二叉查找树,空树的高度定义为-1,在对树进行操作的时候,时间复杂度往往都是log(N),但是这里复杂操作就是插入,为什么?因为你插入一个节点可能会破坏AVL树的特性,那么就要把性质恢复以后才认为这一步插入完成,事实上可以通过对树进行简单的修正来做到,这个就称为旋转

二  单旋转

什么时候需要单旋转?怎么进行单旋转?这都是我们要考虑的问题
1  什么时候需要单旋转?

类似于这种,我们不难发现这个左右子树都是相差为2的,x都是有问题的,因为它破坏了AVL树的平衡,这个时候我们需要用到旋转,但是是不是用到单旋转呢?我们可以发现出现问题的树都是在外面的,那么我们就要单旋转,因为出现问题的树在外侧,如果是在内测就不是单旋转了

2  怎么进行单旋转? 

我们可以看我们出现问题的节点在哪里,这个时候我们就进行标记,然后进行对应的旋转,上面的图已经画的很详细啦,然后单旋转的出现情况的简图我已经滑倒情景1,2的旁边啦,我们可以看到这个是一条直线的,不是弯曲的

二  双旋转 

1  什么时候需要进行双旋转 

我们可以看到上面两个图,这个出现问题都是在内测的,那么就是需要进行双旋转的情况,旁边我也画了简图,用来表示出需要双旋转的情况,接下来我们就要去思考怎么进行双旋转了

2  怎么进行双旋转?

其实双旋转就是两次单旋转,这上面画了过程图,很容易理解

综上所述:单旋转的情况就是在外侧的时候,简化结构图是直线的时候就是进行单旋转
                  双旋转的情况就是在内测的时候,简化结构图是直线的时候就是进行双旋转
过程就是找到问题的根节点,然后进行根节点上面一个节点进行旋转,然后再把这个问题根节点的子树进行重新放置就可以处理掉这个情况


总结

今天主要讲解了AVL树的简介,还有插入的操作,操作分为插入到内测和插入到外侧的情况,下一讲将讲述具体的代码实现

原文地址:https://blog.csdn.net/2401_86738532/article/details/146467064
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/612581.html

相关文章:

  • kafka部署手册
  • 关于ArcGIS中加载影像数据,符号系统中渲染参数的解析
  • HarmonyOS:GridObjectSortComponent(两个Grid之间网格元素交换)
  • 深度探秘K8s服务(Service):架构基石与应用实践
  • 【LeetCode 热题 100】解答汇总
  • 苏宁开放平台关键字搜索接口接入教程‌
  • springboot 四层架构之间的关系整理笔记一
  • es 3期 第27节-运用Script脚本实现复杂需求
  • 简记_FPGA 硬件最小系统设计
  • Springbean(二)@Component及其派生注解自动注入(2)使用注意和加载问题
  • 一周掌握Flutter开发--8. 调试与性能优化(下)
  • 计算机网络--传输层(1)
  • html dom 的 event 事件
  • 【Elasticsearch基础】基本核心概念介绍
  • [实操]MySQL8 读写分离后,配合redis的方法与步骤
  • pnpm 依赖升级终极指南:从语义化版本控制到 Monorepo 全局更新的企业级实践
  • ComfyUi教程之阿里的万象2.1视频模型
  • Redis学习二
  • 级联FFT(超采样FFT架构)的MATLAB代码及原理
  • ip改变导致的数据库连接不上