平衡二叉树
- 平衡二叉树(Balanced Binary Tree),简称平衡树(AVL树)――树上任一结点的左子树和右子树的高度之差不超过1。
- 结点的平衡因子 = 左子树高-右子树高。
调整最小不平衡子树
LL && RR
LR && RL
查找效率分析
高为h的平衡二叉树最少有几个结点——递推求解
平衡二叉树的删除
具体删除步骤
①删除结点(方法同“二叉排序树”点这里)
- 若删除的结点是叶子,直接删
- 若删除的结点只有一个子树,用子树顶替删除位置
- 若删除的结点有两棵子树,用前驱(或后继)结点顶替,并转换为对前驱(或后继)结点的删除
②一路向上找到最小不平衡子树,找不到就完结撒花(算法结束)
③找最小不平衡子树下,“个头”最高的儿子、孙子结点
④根据孙子的位置,调整平衡(LL/RR/LR/RL)
- 孙子在LL:儿子右单旋
- 孙子在RR:儿子左单旋
- 孙子在LR:孙子先左旋,再右旋
- 孙子在RL:孙子先右旋,再左旋
⑤如果不平衡向上传导,继续②
- 对最小不平衡子树的旋转可能导致树变矮,从而导致上层祖先不平衡(不平衡向上传递)
删除操作的时间复杂度
实例演示