AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定义为-1)。
它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。
AVL树的性质:
- 左子树和右子树的高度差不超过1
- 每个结点的左子树和右子树都是AVL树
- 每个结点都有一个平衡因子,任一结点的平衡因子是-1,0,1。每个结点的平衡因子等于右子树高度减去左子树的高度
AVL树是在二叉查找树的基础上建立的,我们知道二叉查找树在最坏情况下(每个结点只有左子树或右子树)增删查的时间复杂度是O(N),这种极端的情况下树是高度不平衡的。
在二叉查找树的基础上,如果使左右子树的高度差不超过1,即达到高度平衡的状态,此时增删查的时间复杂度为O(logN)(2为底数)。
为了让它保持高度平衡,我们引入了平衡因子,每个结点的平衡因子只可能是-1,0,1中的一个。
每次插入/删除一个结点,我们都需要向上更新一下新增结点/删除结点的祖先的平衡因子。一旦发现某个祖先的平衡因子变为2或者-2,我们就需要通过旋转来使这棵树保持AVL树的特性。
来源:https://www.cnblogs.com/i-hard-working/p/10749998.html