AVL平衡树

特征:

  • AVL
    树既是二叉搜索树,也是平衡二叉树,同时满足这两类二叉树的所有性质
  • AVL 树是一种平衡二叉搜索树

属性:

  • 节点高度
  • 节点平衡因子:节点左子树的高度减去右子树的高度,空节点的平衡因子为0

AVL 树旋转:

  • 作用:

    • AVL
      树的特点在于“旋转”操作,它能够在不影响二叉树的中序遍历序列的前提下,使失衡节点重新恢复平衡
    • 旋转操作既能保持“二叉搜索树”的性质,也能使树重新变为“平衡二叉树”
  • 旋转:
    • 左旋
    • 右旋
    • 先左旋再右旋
    • 先右旋再左旋

四种旋转情况的选择条件

失衡节点的平衡因子 子节点的平衡因子 应采用的旋转方法
 > 1 (左偏树)  ≥ 0 右旋
 > 1 (左偏树)  < 0 先左旋后右旋
 < −1 (右偏树)  ≤ 0 左旋
 < −1 (右偏树)  > 0 先右旋后左旋

AVL树的应用:

  • 组织和存储大型数据,适用于高频查找、低频增删的场景。
  • 数据库中的索引
  • 红黑树也是一种常见的平衡二叉搜索树。
    • 相较于 AVL
      树,红黑树的平衡条件更宽松,插入与删除节点所需的旋转操作更少,节点增删操作的平均效率更高。

3.AVL平衡树的更多相关文章

  1. 实现Avl平衡树

    实现Avl平衡树   一.介绍 AVL树是一种自平衡的二叉搜索树,它由Adelson-Velskii和 Landis于1962年发表在论文<An algorithm for the organi ...

  2. Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现

    AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...

  3. 数据结构学习-AVL平衡树

    环境:C++ 11 + win10 IDE:Clion 2018.3 AVL平衡树是在BST二叉查找树的基础上添加了平衡机制. 我们把平衡的BST认为是任一节点的左子树和右子树的高度差为-1,0,1中 ...

  4. AVL平衡树的插入例程

    /* **AVL平衡树插入例程 **2014-5-30 11:44:50 */ avlTree insert(elementType X, avlTree T){ if(T == NULL){ T = ...

  5. AVL 平衡树

    AVL是一种平衡二叉树,它通过对二叉搜索树中的节点进行旋转使得二叉搜索树达到平衡.AVL在所有的平衡二叉搜索树中具有最高的平衡性. 定义 平衡二叉树或者为空树或者为满足如下性质的二叉搜索树: 左右子树 ...

  6. AVL平衡树(非指针实现)

    看了网上三四篇博客,学习了AVL树维护平衡的方式.但感觉他们给出的代码都有一点瑕疵或者遗漏,懂得了思想之后,花了一些时间把他们几篇的长处结合起来,没有使用指针,实现了一下.每个小逻辑功能都抽象成了函数 ...

  7. 数据结构——AVL平衡树

    1.是二叉搜索树(Binary Search Tree) 2.树和所有左右子树高度之差为-1,0,1 平衡因子(balance factor) =右子树高度-左子树高度 平衡化旋转: 1.从插入位置向 ...

  8. My implementation of AVL tree

    C++实现的avl平衡树 #include <stdlib.h> #include <time.h> #include <string.h> #include &l ...

  9. [SinGuLaRiTy] 平衡树

    [SinGuLaRiTy-1009] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 二叉查找树 二叉查找树是指具有下列性质的非空二叉树: ⑴ ...

  10. 数据结构--Avl树的创建,插入的递归版本和非递归版本,删除等操作

    AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树.   2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1(空树的高度为-1).   也就是说,AVL树,本质上 ...

随机推荐

  1. 在 django-ninja 中实现类似腾讯阿里云的应用鉴权机制

    前言 本文章介绍如何使用基于 AppClient 模型的 Django-Ninja API 鉴权机制. 这也是上次说的中台项目衍生物 中台项目相关的文章,我大概还会再写一篇 这个系列的文章注定是没什么 ...

  2. 多个pdf和图片、word实现预览和下载

    效果 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. POLIR: Polarization社会贫富分化的根本原因、科学的艺术化表达之客观主观与背景、以及权利的集中与社会发展

    拨乱反正平反冤案赔偿昭雪先.共和与专制 看是否限制民主(人自主自由及财产). 尊重人的自主选择,人身.财产.自由: 如果"老一套搞得通","要新一套干什么"?新 ...

  4. SciTech-Mathmatics-InnerProduct(内积)的多种概念: + 向量分解 + 范数/长度: 有限维空间的内积 与 无限维空间的内积

    https://www.zhihu.com/question/29754921 数学记号 \(\large \overline{f(x)}\) 代指 \(\large {f(x)}\) 的共轭函数. ...

  5. 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 ...

  6. 自定义.sh 文件在linux 中开机自启设置-九五小庞

    有时候呢我们需要在centos系统启动的时候运行程序,这样保证一些服务就没有中断,相信你理解是什么意思.其实方法很简单呐,就是把需要运行的程序放在/etc/rc.d/rc.local里面就可以启动了除 ...

  7. [ABC #274 F]Fishing

    \(1\) 题目翻译 有 \(n\) 条鱼在数轴上移动. 第 \(i\) 条鱼在时刻 \(0\) 时在位置 \(x_i\) 处,价值为 \(w_i\),将会以每时刻 \(t_i\) 的速度向数轴正方向 ...

  8. 为gitlab添加GPG

    为gitlab添加GPG 下载安装GnuPG 自行下载安装:https://gnupg.org/download/ 安装结束后查看安装信息: gpg --version 生成 执行 gpg --ful ...

  9. vscode下gitbash无法使用自定义命令

    今天把配置了git bash自定义命令,但在vscode中无法使用,提示command not found,在设置中加上如下配置就好了. "terminal.integrated.shell ...

  10. 包装类Integer的equal方法与“==”运算符 比较

    包装类Integer的equal方法与"=="运算符 比较 一.在讲述之前先扔出一段代码看看 public static void main(String[] args) { In ...