AVL树(平衡二叉树)


        平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1。常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。平衡树可以完成集合的一系列操作, 时间复杂度空间复杂度相对于“2-3树”要低,在完成集合的一系列操作中始终保持平衡,为大型数据库的组织、索引提供了一条新的途径 [1] 

        上面提出的任意节点的子树的高度差都小于等于1,其实就是平衡因子在[-1,1]这个闭合区间内的整数集(-1,0,1)

   平衡因子的计算如下:

 节点的深度是根节点到这个节点的最长路径上的节点数

 上图中:

(a) 平衡二叉树
此节点往下 左子树深度 - 右子树深度=平衡因子
5的结点平衡因子就是 3 - 2 = 1;
2的结点平衡因子就是 1 - 2 = -1;
4的结点平衡因子就是 1 - 0 = 1;
6的结点平衡因子就是 0 - 1 = -1;
叶子结点都是为 0;
 
(b)不平衡二叉树
此节点往下 左子树深度- 右子树深度=平衡因子
3 的结点平衡因子就是 2 - 4 = -2;
1 的结点平衡因子就是 0 - 1 = -1;
4 的结点平衡因子就是 0 - 3 = -3;
5 的结点平衡因子就是 0 - 2 = -2;
6 的结点平衡因子就是 0 - 1 = -1;
叶子结点都是为 0;

以上可判断出任意二叉树是否是平衡树

        

添加节点
往平衡二叉树中添加节点很可能会导致二叉树失去平衡,所以我们需要在每次插入节点后进行平衡的维护操作。插入节点破坏平衡性有如下四种情况:

LL(右旋)
LL的意思是向左子树(L)的左孩子(L)中插入新节点后导致不平衡,这种情况下需要右旋操作,而不是说LL的意思是右旋,后面的也是一样。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM