概要:AVL树是以人名来命名的。

1、Blance Factor(平衡因子):

是它的左子树的高度减去它的右子树的高度(有时相反)。blance factor={-1,0,1},任何一个节点的平衡因子为-1,0,1.

2、通过旋转操作来进行平衡(四种)

自己总结:左旋,是逆时针;右旋,是顺时针。

旋转操作:

1、左旋

子树形态:右右子树-->左旋

AVL数首先是一个颗搜索树,因此满足左子树小于根节点,右子树大于根节点的大小关系。这可帮助理解左右旋的目的。

数据结构之AVL树精记

2、右旋

子树形态:左左子树-->右旋

数据结构之AVL树精记

3、左右旋

子树形态:左右子树-->左右旋

先左旋(C小于B,小于A。所以左旋是B拉下来,C顶上去,此时还符合二叉树性质)

数据结构之AVL树精记

左旋之后,中间变成左左子树情形,接下来进行右旋即可。

4、右左旋

子树形态:右左子树-->右左旋

先进行一次右旋(C是小于B的,C顶上去,B一下来,还是满足搜索性的性质),再进行一次左旋。

数据结构之AVL树精记

最后:

AVL数的查找性能,就在于树的深度。

下图带有子节点的旋转:

数据结构之AVL树精记

搞清楚,为什么会出来AVL这个数据结构?平衡因子怎么定的? 

平衡因子由来是因为它的查询时间复杂度等于树的深度,所里就会记录深度差,得到平衡因子。平衡因子不满足的话,就要进行上述四种情况的旋转操作,是的重新编程AVL树。

AVL树不足:

节点需要存储额外信息,且调整次数频繁。

调整频繁,导致树的维护成本偏高,我们可能平衡因子没必要严格限制在-1或者-2,因此就引入了一些其他的树。叫做近似平衡二叉树,所谓的近似是指,不需要每次非常严格的来平很使其满足平衡因子的要求。红黑树就是近似平衡二叉树。 

相关文章: