自平衡二叉搜索树(AVL)

简述

AVL树是计算机科学中最早被发明的自平衡二叉搜索树,顾名思义,AVL首先是一颗平衡树,其次它能够实现自平衡。

平衡因子

AVL树引入了平衡因子(Balance Factor)的概念,即任意一个节点的左右子树的最大高度差为1,因此平衡因子的取值范围是:{-1, 0, 1}。因此,AVL树也被称为高度平衡树。

复杂度

  • 时间复杂度

    由于AVL树一直都处于高度平衡的状态,所以其查找、插入和删除在平均和最坏情况下的时间复杂度都是O(logn)。

  • 空间复杂度

    AVL树的空间复杂度只与节点个数相关,因此为O(n)。

四种旋转

由于AVL树需要时刻保持平衡状态,因此在每一次插入或删除后都可能需要进行旋转操作,以确保插入或删除后的AVL树仍然处于平衡状态。

AVL旋转主要包括四种基础旋转,分别是:

  • 左旋转
  • 右旋转
  • 左右旋转:先进行一次左旋转,再进行一次右旋转
  • 右左旋转:先进行一次右旋转,再进行一次左旋转

优缺点

  • 优点

    AVL树的优势源于它的高度平衡,不管是查找、插入和删除在平均和最坏情况下的时间复杂度都是O(logn)。

  • 不足

    AVL树不足是为了维持高度平衡,节点需要存储额外的信息,比如每个节点需要存储一个平衡因子(至少是一个整数类型)。

    此外,由于AVL树每次插入或删除操作后都可能需要进行旋转操作,所以调整次数会比较频繁,导致维护成本偏高。

适用场景

鉴于AVL树的优缺点,AVL树适用于查询操作远大于插入或删除的场景,比如数据库。

参考资料

平衡树 - 维基百科,自由的百科全书

AVL树 - 维基百科,自由的百科全书

第15课丨AVL树和红黑树的实现和特性

Comments