AVL树的来源
AVL树得名于它的发明者G. M. Adelson-Velsky和Evgenii Landis。在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。
AVL树的定义
·它是一棵二叉搜索树;
·对任意结点X,X左右子树的高度差至多为1。
例如,图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++实现