AVL树可以是空树或者具有下列性质的二叉搜索树:
- 左右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。
AVL树的插入
新结点p的平衡因子为0,它的父结点为pr,修改后pr的平衡因子值有三种情况:
- 结点pr的平衡因子为0,不需要进行平衡化处理
- 结点pr的平衡因子的绝对值|bf|=1,需要从结点pr向根的方向回溯,进行平衡化处理
- 结点pr的平衡因子绝对值|bf|=2:
(1). 若结点pr的bf=2,说明右子树高,结合其右子女q的bf:
a. 若q的bf=1,执行左单旋转
b.若q的bf为-1,执行先右后左双旋转
(2).若结点pr的bf=-2,说明左子树高,结合其左子女q的bf:
a.若q的bf为-1,执行右单旋转
b.若q的bf为1,执行先左后右双旋转
红黑树(特殊的二叉搜索树)
可以把一棵红黑树视为一棵扩充二叉树,用外部结点表示空指针。
特性:
- 根结点和所有外部结点的颜色是黑色。
- 从根结点到外部结点的途中没有连续两个结点的颜色是红色。
- 所有从根到外部结点的路径上都有相同数目的黑色结点。
结点x的黑高度:从任一结点x出发(不包括结点x),到达一个外部结点的任一路径上的黑结点个数。
假设根结点的黑高度bh(root)=r,则由特性可知每个红色指针后面都会跟随一个黑色指针,从而每条从根到外部结点的路径上都有r~2r个指针。
结论:设h是红黑树的高度(不包括外部结点),n是树中内部结点的个数,r是根结点的黑高度:
- h<=2r
- n>=2^r-1
- h<=2log2^(n+1)