首页 > 其他 > 详细

[树结构]平衡二叉树AVL

时间:2015-09-25 20:02:15      阅读:513      评论:0      收藏:0      [点我收藏+]

平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1,平衡二叉树又称为AVL树。

将二叉树节点的左子树深度减去右子树深度的值称为平衡因子BF,平衡二叉树上所有节点的平衡因子只可能是-1,0或者1。

距离插入点最近的,且平衡因子的绝对值大于1的结点为根的子树,我们称为最小不平衡子树。

技术分享

平衡二叉树实现原理

先来看一个例子:

对于数组a[10]={3,2,1,4,5,6,7,10,9,8}构建平衡二叉树。

按照二叉排序树的方式插入新的元素,当插入1的时候,使得当前二叉树失去平衡:

技术分享

当插入5的时候,使得平衡二叉树再次失去平衡:

技术分享

插入6的时候,同样产生不平衡:

技术分享

注意:上面的这些不平衡都有一个共同的特点,那就是最小不平衡子树的根的BF同它的孩子(左孩子或者右孩子)的BF是同号的。所以这是仅需要一次旋转就可以了

当插入到数字9的时候,同样的发生了不平衡:

技术分享

从上面的图可以看到一次的旋转是不能做到再次的平衡的。所以要两次旋转。

技术分享技术分享

在插入8的时候,同样的发生了不平衡,同样的需要两次调整:

技术分享技术分享技术分享

所以总结上面的过程:

当最小不平衡子树根节点的平衡因子BF是大于1的时候,就右旋,小于-1时就左旋。

插入节点后,最小不平衡子树的BF与它的子树的BF符号相反时,就需要对子树节点先进行一次旋转,以使得符号相同后,在反向旋转一次才能够完成平衡操作。

平衡二叉树算法实现

 

[树结构]平衡二叉树AVL

原文:http://www.cnblogs.com/stemon/p/4839019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!