平衡二叉树(AVL树,AVL树旋转)

1、平衡因子(BF):BF = HL – HR(其中HL和HR分别是左子树和右子树的高度)。

2、平衡二叉树(AVL树):对于任一结点,左右子树的高度差的绝对值是小于1。 即 |BF|<=1。

例:1、
《平衡二叉树(AVL树,AVL树旋转)》
对于3这个结点来讲,左子树高度为2,右子树高度为0,左右子树高度差为2,2>1,所以该树不是平衡二叉树。

2、
《平衡二叉树(AVL树,AVL树旋转)》
对于这个树里面的每一个结点来讲,左右子树的高度差都小于等于1,所以该树是平衡二叉树 。

3、高度为h的平衡二叉树的最小结点数:N(h) = N(h-1)+N(h-2)+1 。其中N(h-1) 和N(h-2)分别是高度为(h-1)和高度为(h-2)的最小结点数。可以推导出——给定结点数为 n的AVL树的最大高度为O(log2n)!

4、平衡二叉树的调整:
(1)、右单旋:不平衡的“发现者”是Mar,“麻烦结点”Nov 在“发现者”右子树的右边,因而叫 RR 插入,需要RR 旋转(右单旋)
《平衡二叉树(AVL树,AVL树旋转)》
《平衡二叉树(AVL树,AVL树旋转)》《平衡二叉树(AVL树,AVL树旋转)》
!!!这种也叫作在“发现者”(被破坏者)的右子树的右子树上

一般调整情况:
《平衡二叉树(AVL树,AVL树旋转)》
注意:调整过后还是要保证是一颗搜索树,即左子树的值小于右子树的值。

(2)、左单旋:“发现者”是Mar,“麻烦结点”Apr 在发现者左子的左边,因而叫 LL 插入,需要LL 旋转(左单旋)
《平衡二叉树(AVL树,AVL树旋转)》
!!!这里存在两个被破坏者,但是只调整了离破坏者最近的结点,这样调整后整颗树也是平衡二叉树了。

一般调整情况:
《平衡二叉树(AVL树,AVL树旋转)》

(3)、LR旋转:“发现者”是May,“麻烦结点”Jan在左子树的边,因而叫 LR 插入,需要LR 旋转
《平衡二叉树(AVL树,AVL树旋转)》

一般调整情况:
《平衡二叉树(AVL树,AVL树旋转)》

(4)、RL旋转:插入的结点在被破坏者的右子树的左子树上。
《平衡二叉树(AVL树,AVL树旋转)》

一般的调整情况:
《平衡二叉树(AVL树,AVL树旋转)》

关于二叉平衡树的实现将在后面补充。

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/beichengll/article/details/76293439
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞