平衡二叉树
定义
平衡二叉树 (balaanced binary tree) 又称AVL树
一棵二叉排序树或者是空树,或者是具有下列性质的二叉排序树:
- 左子树与右子树的高度之差的绝对值
小于等于1
- 左子树和右子树也是
平衡二叉排序树
该结点左子树和右子树的高度差:平衡因子 (BF)
根据定义,平衡二叉树上所有节点的平衡因子只能是 0,1,-1
对于一棵有n个结点的AVL树,其高度保持在O(log2n) 数量级,ASL也保持在O(log2n)量级
平均查找长度 ASL
查找成功的平均查找长度为:∑(本层高度*本层元素个数) / 节点总数
查找不成功的平均查找长度:∑(本层高度*本层补上的叶子个数) / 补上的叶子总数
平衡调整方法
当在一个平衡二叉排序树上插入一个结点时,又肯导致失衡,则必须重新调整树的结构,使之恢复平衡。
调整原则:
- 降低高度
- 保持二叉排序树的性质
调整过程中可根据二叉排序树的性质进行判断,比较A B C结点的大小
LL型
调整后的结果:
- B结点带左子树上升
- A结点成为B结点的左孩子
- 原来B结点的右子树作为A的左子树
RR型
调整后的结果:
- B结点带右子树上升
- A结点成为B的左孩子
- 原来B结点的左子树作为A的右子树
LR型
调整后的结果:
- C结点穿过A、B结点上升(B<C<A)
- B结点成为C的左孩子,A结点成为C的右孩子
- 原C结点的左子树作为B的右子树,原C结点的右子树作为A的左子树
RL型
例:
- C结点穿过A、B结点上升(A<C<B)
- A结点成为C的左孩子,B结点成为C的右孩子
- 原C结点的左子树作为A的右子树,原C结点的右子树作为B的左子树