AVL树特点
AVL树本质上还是一棵二叉搜索树,它的特点是:
1.本身首先是一棵二叉搜索树。
2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。
也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。
AVL树相较于一般的二叉搜索树来说多了平衡因子(balance Factor),一个树节点的平衡因子初始为0,当该节点有右孩子,平衡因子加一,当该节点有左孩子时,平衡因子减一
即:
cur是parent的右孩子 parent.bf=parent.bf+1;
cur是parent的左孩子 parent.bf=parent.bf-1;
也就是说只要树的每一个节点的平衡因子是-1,0,1的时候,该树就是AVL树
AVL树的插入过程就很好的演绎AVL树的特性
当一个新节点插入进来,就需要注意平衡因子的变化,当变为-2或者2时就需要进行相应的修复,使之成为AVL树.AVL还有一个特性就是,在任意时刻,最多只有一个节点不满足平衡因子的特征.
下面介绍AVL树的失衡状态及修复方式:
1.左左失衡 修复方式:将失衡节点右旋
2.左右失衡 修复方式:将失衡节点的左孩子先左旋,再对失衡节点右旋
3.右右失衡 修复方式:将失衡节点左旋
4.右左失衡 修复方式:先将失衡节点的右孩子进行右旋,再将失衡节点进行左旋
AVL树性能分析:
在左右子树高度之差绝对值不大于1的情况下可以保证高效的时间复杂度:logN 但与此同时AVL树在插入和删除的时候旋转次数较多,尤其是在删除的情况下,可能需要旋转到根.由此可知,AVL适用于数据个数为静态的情况下