平衡二叉树(AVLTree):
平衡二叉树具有以下性质:
1.它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
2.这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。
3.频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。
平衡二叉树的插入:
当插入后,二叉树结点右侧的高度与左侧高度之差的绝对值为小于等于1的时候,我们就认为他为平衡的,否则,我们应该调整。
调整:
单旋转:
双旋转: