3.AVL平衡树
AVL平衡树
特征:
- AVL
树既是二叉搜索树,也是平衡二叉树,同时满足这两类二叉树的所有性质 - AVL 树是一种平衡二叉搜索树
 
属性:
- 节点高度
 - 节点平衡因子:节点左子树的高度减去右子树的高度,空节点的平衡因子为0
 
AVL 树旋转:
- 作用:
- AVL
树的特点在于“旋转”操作,它能够在不影响二叉树的中序遍历序列的前提下,使失衡节点重新恢复平衡 - 旋转操作既能保持“二叉搜索树”的性质,也能使树重新变为“平衡二叉树”
 
 - AVL
 - 旋转:
- 左旋
 - 右旋
 - 先左旋再右旋
 - 先右旋再左旋

 
 
四种旋转情况的选择条件
| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 | 
|---|---|---|
| > 1 (左偏树) | ≥ 0 | 右旋 | 
| > 1 (左偏树) | < 0 | 先左旋后右旋 | 
| < −1 (右偏树) | ≤ 0 | 左旋 | 
| < −1 (右偏树) | > 0 | 先右旋后左旋 | 
AVL树的应用:
- 组织和存储大型数据,适用于高频查找、低频增删的场景。
 - 数据库中的索引
 - 红黑树也是一种常见的平衡二叉搜索树。
- 相较于 AVL
树,红黑树的平衡条件更宽松,插入与删除节点所需的旋转操作更少,节点增删操作的平均效率更高。 
 - 相较于 AVL
 
3.AVL平衡树的更多相关文章
- 实现Avl平衡树
		
实现Avl平衡树 一.介绍 AVL树是一种自平衡的二叉搜索树,它由Adelson-Velskii和 Landis于1962年发表在论文<An algorithm for the organi ...
 - Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现
		
AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...
 - 数据结构学习-AVL平衡树
		
环境:C++ 11 + win10 IDE:Clion 2018.3 AVL平衡树是在BST二叉查找树的基础上添加了平衡机制. 我们把平衡的BST认为是任一节点的左子树和右子树的高度差为-1,0,1中 ...
 - AVL平衡树的插入例程
		
/* **AVL平衡树插入例程 **2014-5-30 11:44:50 */ avlTree insert(elementType X, avlTree T){ if(T == NULL){ T = ...
 - AVL 平衡树
		
AVL是一种平衡二叉树,它通过对二叉搜索树中的节点进行旋转使得二叉搜索树达到平衡.AVL在所有的平衡二叉搜索树中具有最高的平衡性. 定义 平衡二叉树或者为空树或者为满足如下性质的二叉搜索树: 左右子树 ...
 - AVL平衡树(非指针实现)
		
看了网上三四篇博客,学习了AVL树维护平衡的方式.但感觉他们给出的代码都有一点瑕疵或者遗漏,懂得了思想之后,花了一些时间把他们几篇的长处结合起来,没有使用指针,实现了一下.每个小逻辑功能都抽象成了函数 ...
 - 数据结构——AVL平衡树
		
1.是二叉搜索树(Binary Search Tree) 2.树和所有左右子树高度之差为-1,0,1 平衡因子(balance factor) =右子树高度-左子树高度 平衡化旋转: 1.从插入位置向 ...
 - My implementation of AVL tree
		
C++实现的avl平衡树 #include <stdlib.h> #include <time.h> #include <string.h> #include &l ...
 - [SinGuLaRiTy] 平衡树
		
[SinGuLaRiTy-1009] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 二叉查找树 二叉查找树是指具有下列性质的非空二叉树: ⑴ ...
 - 数据结构--Avl树的创建,插入的递归版本和非递归版本,删除等操作
		
AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树. 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1(空树的高度为-1). 也就是说,AVL树,本质上 ...
 
随机推荐
- 在 django-ninja 中实现类似腾讯阿里云的应用鉴权机制
			
前言 本文章介绍如何使用基于 AppClient 模型的 Django-Ninja API 鉴权机制. 这也是上次说的中台项目衍生物 中台项目相关的文章,我大概还会再写一篇 这个系列的文章注定是没什么 ...
 - 多个pdf和图片、word实现预览和下载
			
效果 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
 - POLIR: Polarization社会贫富分化的根本原因、科学的艺术化表达之客观主观与背景、以及权利的集中与社会发展
			
拨乱反正平反冤案赔偿昭雪先.共和与专制 看是否限制民主(人自主自由及财产). 尊重人的自主选择,人身.财产.自由: 如果"老一套搞得通","要新一套干什么"?新 ...
 - SciTech-Mathmatics-InnerProduct(内积)的多种概念: + 向量分解 + 范数/长度: 有限维空间的内积 与 无限维空间的内积
			
https://www.zhihu.com/question/29754921 数学记号 \(\large \overline{f(x)}\) 代指 \(\large {f(x)}\) 的共轭函数. ...
 - SciTech-Mathmatics-等比数列n项加总公式 + 三角函数Trigonometric Identities you must remember: 需要记住的三角函数
			
$\large S_n = a_1 \cdot \frac{1-q^n}{1-q}=\frac{a_1-a_n \cdot q}{1-q},\ when\ q \neq 1 \ and\ a_1 \n ...
 - 自定义.sh 文件在linux 中开机自启设置-九五小庞
			
有时候呢我们需要在centos系统启动的时候运行程序,这样保证一些服务就没有中断,相信你理解是什么意思.其实方法很简单呐,就是把需要运行的程序放在/etc/rc.d/rc.local里面就可以启动了除 ...
 - [ABC #274 F]Fishing
			
\(1\) 题目翻译 有 \(n\) 条鱼在数轴上移动. 第 \(i\) 条鱼在时刻 \(0\) 时在位置 \(x_i\) 处,价值为 \(w_i\),将会以每时刻 \(t_i\) 的速度向数轴正方向 ...
 - 为gitlab添加GPG
			
为gitlab添加GPG 下载安装GnuPG 自行下载安装:https://gnupg.org/download/ 安装结束后查看安装信息: gpg --version 生成 执行 gpg --ful ...
 - vscode下gitbash无法使用自定义命令
			
今天把配置了git bash自定义命令,但在vscode中无法使用,提示command not found,在设置中加上如下配置就好了. "terminal.integrated.shell ...
 - 包装类Integer的equal方法与“==”运算符 比较
			
包装类Integer的equal方法与"=="运算符 比较 一.在讲述之前先扔出一段代码看看 public static void main(String[] args) { In ...