一,平衡二叉树插入失衡情况及解决方案
由于各种的插入导致的不平衡,每次调整都是最小不平衡子树。
LL:由于在结点A的 左孩子的左子树 插入结点导致失衡。
右单旋:①将A的 左孩子B 向右上旋转 代替A成为根节点
②将A结点 向右下旋转 成为B的 右子树 的根节点
③B的原来 右子树 成为A的 左子树。
RR:由于在结点A的 右孩子的右子树 插入结点导致失衡。
左单旋:①将A的 右孩子B 向左上旋转 代替A成为根节点
②将A结点 左下旋转 成为B的 左子树 的根节点
③B的原来 左子树 成为A的 右子树。
LR:由于在结点A的 左孩子的右子树 插入结点导致失衡。
先左旋后右旋:先让A的左孩子B的右子树的根节点C左上旋提升到B位置,在让C右上旋提升到A位置。
RL:由于在结点A的 右孩子的左子树 插入结点导致失衡。
先右旋后左旋:先让A的右孩子B的左子树的根节点C右上旋提升到B位置,在让C左上旋提升到A位置。
二,平衡二叉树删除步骤
①删除结点(方法同二叉排序树)
1.如果删除的是叶子结点,直接删除。
2.如果删除的结点只有一颗子树,则用子树顶替删除位置。
3.如果删除的结点有两颗子树,则直接前驱(或直接后继)结点顶替,并转为对直接前驱(或直接后继)的删除。
②一路向北(上)找到最小不平衡子树,找不到就结束。
③找到最小不平衡子树下,“个头最大”的儿子和孙子。
④根据孙子位置,调整平衡(孙子相对于爷位置LL,RR,LR,RL)。
1.如果孙子在LL,儿子右单旋。
2.如果孙子在RR,儿子左单旋。
3.如果孙子在LR,孙子先左旋后右旋。
4.如果孙子在RL,孙子先右旋后左旋。
⑤如果不平衡向上传导,继续②。
三,平衡二叉树删除实例
1.RR型
1.RL型
1.平衡向上传导