【数据结构与算法】AVL树(1)——简介

AVL树的来源

  AVL树得名于它的发明者G. M. Adelson-Velsky和Evgenii Landis。在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。

AVL树的定义

·它是一棵二叉搜索树;

·对任意结点X,X左右子树的高度差至多为1。
在这里插入图片描述

图1

在这里插入图片描述

图2

  例如,图1和图2都是二叉搜索树,但是图1是AVL树,而图2不是,因为图2的12这个结点的左右子树的高度差的绝对值为2。

AVL树的高度

  我们假设AVL树的高度为h,N(h)表示高度为h的AVL树包含的结点数。

最小结点数

  如果我们将左子树填充为高度为h-1的树,那么我们应该把右子树填充为高度为h-2的树。因此,高度为h的AVL树具有的最小结点数为:

  
  
N(h) = N(h-1) + N(h-2) + 1

  由递推公式可得:

  
  
N(h) = O(1.68h) ⇒ 1.44logn ≈ O(logn)

  其中,n为AVL树中的结点个数,AVL树的最大高度为O(logn)。

最大结点数

  我们需要将左右子树都填充为高度为h-1的树。因此,我们得到:

  
  
N(h) = 2N(h-1)) + 1

  上面的公式定义的是满二叉树的情况。求解该递推公式得到:

  
  
N(h) = O(2h) ⇒ logn ≈ O(logn)

  所以,在两种情况中AVL树性质使得具有n个结点的AVL树的高度为O(logn)。因此,查找、插入和删除在平均和最坏情况下的时间复杂度都是O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。

相关文章

AVL树(1)——简介
AVL树(2)——插入与旋转调整
AVL树(3)——C++实现

发布了143 篇原创文章 · 获赞 140 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/qq_43733499/article/details/102839007
今日推荐