目录
1.什么是平衡二叉树?
当我们以不同次序将结点插入二叉树时,会导致出现不同的搜索树,以至于每一种树都有一种平均搜索长度ASL,那么什么情况下树的搜索长度最小呢?
〖例〗搜索树结点不同插入次序,将导致不同的深度和平均查找长度ASL
可以看到当左右子树的高度差不超过1时就能达到我们的要求,也就是平衡二叉树了。
定义:
“平衡因子(Balance Factor,简称BF): BF(T) = hL-hR, 其中hL和hR分别为T的左、右子树的高度。”
平衡二叉树(Balanced Binary Tree)(AVL树)
空树,或者
任一结点左、右子树高度差的绝对值不超过1,即|BF(T) |≤ 1
2.平衡二叉树的性质
结点为n的平衡二叉树最高为log2n。
3.平衡二叉树的调整
当我们对一个二叉搜索树进行插入的时候,虽然满足了搜索树的要求,但是却破坏了平衡二叉树这个平均搜索效率高的特性,所以我们需要对这个“平衡被破坏的树”进行调整。
注意:有时候插入元素即便 不需要调整结构,也可能需要重新计算 一些平衡因子。
RR旋转
〖例〗不平衡的“发现者”是Mar, “麻烦结点”Nov 在发现者右子树的右边, 因而叫 RR 插入,需要RR 旋转(右单旋)
具体图示:
LL旋转
〖例〗“发现者”是Mar, “麻烦结点”Apr 在发现者左子树的左边, 因而叫 LL 插入,需要LL 旋转(左单旋)
具体图示:
LR旋转
〖例〗“发现者”是May, “麻烦结点”Jan在左子树的右边, 因而叫 LR 插入,需要LR 旋转
具体图示:
RL旋转
综上,无论是多么复杂的旋转,其目的就是为了将一个二叉排序树调整平衡 ,但是有可能这么些个方法记不住,那么还有以下方法来解决。
秒解法
以正确的方式对二叉排序树插入结点,从插入的结点开始往上找到不平衡的子树的根节点为路径,以该根节点为开始路径上的三个结点直接进行调整 ,调整完将树接回去(其余的子节点按规则插入)。
〖例〗
〖例〗
〖例〗
〖例〗