AVL tree 学习笔记

前言

最近在复习数据结构,学习了一下 AVL 树,现记录如下。

什么是 AVL 树

AVL 树是一种平衡二叉查找树(self-balancing binary search tree),由苏联两位科学家 Georgy Adelson-VelskyEvgenii Landis 于1962年在论文《An algorithm for the organization of information》中首次提出。

AVL 树的性质

AVL 是一个平衡二叉查找树,首先它应是一个二叉查找树(又称二叉排序树),因此,它首先具备如下特性:

  • 若左子树不空,则左子树上所有结点的值均小于它的根结点的值。
  • 若右子树不空,则右子树上所有结点的值均大于它的根结点的值。
  • 左、右子树也分别为二叉排序树。

AVL 引入了平衡因子,即:

  • 每个节点的左右子树高度之间的差异小于或等于1。

AVL 树的旋转

通过对节点的旋转来重新平衡树,通常对 AVL 树的旋转有以下四种情况:

LL(Left Left Case):

LL

LR(Left Right Case):

LR

RR(Right Right Case):

RR

RL(Right Left Case):

RL

p.s. 以上图片通过 draw.io 绘制而成,凑活能看(

再放一张 gif,便于理解,图源来自 Wikipedia:

AVL

AVL树的时间空间复杂度

以下图表来源于Wikipedia.

AlgorithmAverageWorst case
spaceO(n)O(n)
searchO(log n)O(log n)
insertO(log n)O(log n)
deleteO(log n)O(log n)

参考资料

  1. https://en.wikipedia.org/wiki/AVL_tree
  2. https://www.geeksforgeeks.org/avl-tree-set-1-insertion/
Built with Hugo
主题 StackJimmy 设计