平衡二叉树 构造方法
轉載:http://blog.csdn.net/zhuyingqingfen/article/details/6530434
平衡二叉樹
對于二叉查找樹,盡管查找、插入及刪除操作的平均運行時間為O(logn),但是它們的最差運行時間都是O(n),原因在于對樹的形狀沒有限制。
平衡二叉樹又稱為AVL樹,它或者是一棵空樹,或者是有下列性質的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左右子樹的深度之差的絕對值不超過1。二叉樹的的平衡因子BF為:該結點的左子樹的深度減去它的右子樹的深度,則平衡二叉樹的所有結點的平衡因子為只可能是:-1、0和1
一棵好的平衡二叉樹的特征:
(1)保證有n個結點的樹的高度為O(logn)
(2)容易維護,也就是說,在做數據項的插入或刪除操作時,為平衡樹所做的一些輔助操作時間開銷為O(1)
一、平衡二叉樹的構造
在一棵二叉查找樹中插入結點后,調整其為平衡二叉樹。若向平衡二叉樹中插入一個新結點后破壞了平衡二叉樹的平衡性。首先要找出插入新結點后失去平衡的最小子樹根結點的指針。然后再調整這個子樹中有關結點之間的鏈接關系,使之成為新的平衡子樹。當失去平衡的最小子樹被調整為平衡子樹后,原有其他所有不平衡子樹無需調整,整個二叉排序樹就又成為一棵平衡二叉樹
1.調整方法
(1)插入點位置必須滿足二叉查找樹的性質,即任意一棵子樹的左結點都小于根結點,右結點大于根結點
(2)找出插入結點后不平衡的最小二叉樹進行調整,如果是整個樹不平衡,才進行整個樹的調整。
2.調整方式
(1)LL型
LL型:插入位置為左子樹的左結點,進行向右旋轉
由于在A的左孩子B的左子樹上插入結點F,使A的平衡因子由1變為2,成為不平衡的最小二叉樹根結點。此時A結點順時針右旋轉,旋轉過程中遵循“旋轉優先”的規則,A結點替換D結點成為B結點的右子樹,D結點成為A結點的左孩子。 (2)RR型 RR型:插入位置為右子樹的右孩子,進行向左旋轉
由于在A的右子樹C的右子樹插入了結點F,A的平衡因子由-1變為-2,成為不平衡的最小二叉樹根結點。此時,A結點逆時針左旋轉,遵循“旋轉優先”的規則,A結點替換D結點成為C的左子樹,D結點成為A的右子樹。 (3)LR型 LR型:插入位置為左子樹的右孩子,要進行兩次旋轉,先左旋轉,再右旋轉;第一次最小不平衡子樹的根結點先不動,調整插入結點所在的子樹,第二次再調整最小不平衡子樹。
? ?由于在A的左子樹B的右子樹上插入了結點F,A的平衡因子由1變為了2,成為不平衡的最小二叉樹根結點。第一次旋轉A結點不動,先將B的右子樹的根結點D向左上旋轉提升到B結點的位置,然后再把該D結點向右上旋轉提升到A結點的位置。 (4)RL型 RL型:插入位置為右子樹的左孩子,進行兩次調整,先右旋轉再左旋轉;處理情況與LR類似。
總結
以上是生活随笔為你收集整理的平衡二叉树 构造方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(七)---循环队列的实现---
- 下一篇: 二分查找的实现---java版本