平衡二叉树
由一个例子引入:
平均查找长度(ASL)计算方法按照一层一层来计算,对于图(a)来说,第一层比较一次,第二层两个结点比较两次,三层三次,四层三次,五层两次,六层一次。
其余(B)(c)是一样的计算方法。
通过对比平均查找长度的不同,说明不同的排列效率不同,如何做才能使效率提高呢?
引入:
简言之就是左右子树高度绝对值不超过1。
平衡的目的是为了让树的高度低一点,因为越平衡的树高度越低。
问题1
h=0时,结点最少为1
h=1时,结点最少为2
h=2时最少为4.
(自己画图就能得出来结论)
运用了一个斐波那契数列。
因此:给定结点树为n的AVL树的最大高度为O(log2N)。
平衡二叉树的调整
为什么讨论这个题目,因为有些时候对平衡二叉树做一些插入就会让树变的不平衡。
所以要讨论平衡二叉树的调整。
第一种:
在下面的这个例子中,因为nov的插入,使得mar不再满足搜索树的条件,因此要对这个结构进行旋转。
在这个例子中,mar<may<nov,因此可以使mar为左子树,may为根,nov为右子树。
因为nov是破坏原本结构的破坏者,在被破坏者(mar)的右边,所以叫做右单旋。
因而叫做RR插入,需要RR旋转(右单旋)
简单说就是被破坏者在破坏者右边的右边。
【ps:平衡二叉树的大前提是搜索树或者查找树,就是左子树一定要小于右子树,不管怎么调整,这个大前提结论是不能改变的。】
第二种:
因为插入者破坏了两个结点的平衡,因此需要在调整时兼顾两者。
其余解释同上。
第三种:
因为插入者在被破坏者的左子树的右子树上,因此是LR旋转。
第四种: