定义
AVL树:是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 O ( l o g n ) O(log {n}) O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL树得名于它的发明者G. M. Adelson-Velsky和Evgenii Landis,他们在1962年的论文An algorithm for the organization of information 中公开了这一数据结构。 节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2的节点被认为是不平衡的,并需要重新平衡这个树。平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来。
平衡二叉树具备以下几个特性:
1.需要平衡,像斜二叉树那种一看就不平衡
2.平衡认为是动作和结果,比较斜的树给你调整平衡了
3.左右子树高度差不能大于1
4.左右子树也是平衡二叉树
平衡在哪里
怎样保证二叉树平衡呢,我们就看下以下几个场景:
单旋转平衡
- 我们依次插入1 2 3的时候,由于是个右斜树,需要通过旋转来达到树平衡
- 根据左结点小于父结点,右结点大于父节点的原则,只需要左旋一次即可达到平衡状态
双旋转平衡
- 原先我们的树是一个平衡状态,当插入90的时候叶子结点高度差大于1了,破坏了平衡
- 为了达到平衡,我们做了两步操作:首先左子树以结点50为顶点的树先进行左旋,然后100为顶点的树再进行右旋
总结
平衡二叉树能够保证我们在进行插入操作的时候树的深度最小,插入查找的速率最快。