由于搜索树结点不同的插入次序,将导致不同的深度和平均查找长度。因此引入平衡二叉树。
平衡因子(Balance Factor,简称BF):BF(T) = hL - hR,即左右子树的高度差
平衡二叉树(Balanced Binary Tree,AVL树)是空树,或者任一结点左、右子树高度差的绝对值不超过1,即|BF(T)| ≤ 1
给定结点数为n的AVL树的最大高度为h = O(log2n)
平衡二叉树的调整
当插入一个结点使平衡二叉树不平衡时,只需要调整插入的节点所在的一部分子树(从插入的节点向上找到连续三个结点)即可。
RR旋转
不平衡的“发现者”是Mar,“麻烦结点”Nov在发现者右子树的右边,因此叫RR(右子树的右孩子)插入,需要RR旋转(右单旋)。
举个🌰:
LL旋转
“发现者”是Mar,“麻烦结点”Apr在发现左子树的左边,因而叫LL插入,需要LL旋转(左单旋)
LR旋转
“发现者”是May,“麻烦结点”Jan在左子树的右边,因而叫LR插入,需要LR旋转