平衡二叉查找树:AVL树的定义
AVL树:能够在key插入时一直保持平衡的二叉查找树
利用AVL树实现ADT Map,基本上与BST的实现相同
不同之处仅在与二叉树的生成与维护过程
AVL树的实现中,需要对每个节点跟踪“平衡因子balance factor"参数
根据节点的左右子树高度来定义平衡因子,确切的说,是左右子树高度差:balanceFactor - height(leftSubTree) - height(rightSubTree)
- 如果平衡因子大于零,称为”左重left-heavy",小于零称为“右重rigt-heavy"
等于零,则平衡。
平衡二叉查找树:平衡因子
在平衡树操作过程中,有节点的平衡因子超出此范围,则需要一个重新平衡的过程
- 保持BST的性质
分析AVL树最差情形下的性能:即平衡因子为1或者-1
- 探索平衡因子为1的”左重“AVL树,树的高度从1开始,问题规模(总节点数N)和比对次数(树的高度h)之间的关系如何?
N h = 1 + N h − 1 + N h − 2 N_h = 1 + N_h-1 + N_h -2 Nh=1+Nh−1+Nh−2 - 接近斐波那契额数列