目录
下一篇:哈夫曼树与编码
定义:
平衡二叉树(Balanced Binary Tree),简AVL树,树上任一结点的左子树和右子树的高度之差不超过1
平衡因子=左子树高-右子树高,所以平衡二叉树的平衡因子只可能是-1、0或1,只要平衡因子的绝对值大于1就不是平衡二叉树
在二叉排序树中插入新结点后,如何保持平衡?
调整最小不平衡子树:从插入结点往回找到第一个不平衡结点,调整以该结点为根的子树
四种情况
在调整后还必须满足二叉排序树的特性
以下都假设A为最小不平衡子树
(1)LL平衡旋转(右单旋转)
如图将A的左孩子B向右上旋转,B代替A作为根结点,将A结点右下旋转称为B的右子树根结点,B的原右子树作为A结点的左子树
(2)RR平衡旋转
A左旋,B作为根结点,A作为B的左子树,B的原左子树作为A的右子树
左旋右旋代码思路:
(3)LR旋转:
先左后右双旋转,如图:
c结点先左旋替代B在右上旋代替A结点,旋转方法与之前一样
注:这里是将C左旋再右旋不是B,即不平衡子树的右子树结点,RL旋转也是差不多的意思
(4)RL旋转
先右后左双旋转:
如图将C右上旋转到B的位置,再把C左上旋转到A的位置
查找效率分析
若树高h,最坏情况为O(h)
使用nh表示深度为h的平衡二叉树中含有的最少结点数
递推一下
n0=0,n1=1,n2=2
且nh=nh-1+nh-2+1,即为根结点+左子树+右子树
可证明平均查找长度为O(log2n)
小结