數據結構與算法分析:樹

二叉樹

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作"左子樹"(left subtree)和"右子樹"(right subtree

二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^{i-1}個結點;深度爲k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹T,如果其終端結點數爲n_0,度爲2的結點數爲n_2,則n_0=n_2+1

 

 

 

 

二叉查找樹

平均查找:O(logn)

平均插入:O(logn)

平均刪除(惰性刪除):O(logn)

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:

1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

3)左、右子樹也分別爲二叉排序樹;

 

AVL-平衡的二叉查找樹

最壞查找:O(logn)

最壞插入:O(logn)

最壞惰性刪除:O(logn)

平衡二叉查找樹,又稱 AVL樹。它除了具備二叉查找樹的基本特徵之外,還具有一個非常重要的特點:的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值(平衡因子不超過1也就是說AVL樹每個節點的平衡因子只可能是-101(左子樹高度減去右子樹高度)。

通過單旋轉雙旋轉操作可以將一個不平衡的二叉查找樹轉爲平衡。

伸展樹

所有最壞M次操作時間o(MlogN)

伸展樹保證M次操作的序列的最壞攤還運行時間爲0(Mlog(N)),伸展樹通過展開操作(類似於旋轉),將已經查詢過的節點放到根節點上,將其相鄰的節點也加高高度。

該樹僅保證M次的的最壞操作爲0(MlogN),但是不保證每一次的操作時間都爲logN

B

平均操作時間:o(logmN),其中m爲叉的數量

是一種多路搜索樹(並不是二叉的):

1.定義任意非葉子結點最多隻有M個兒子;且M>2

2.根結點的兒子數爲[2, M]

3.除根結點以外的非葉子結點的兒子數爲[M/2, M]

4.每個結點存放至少M/2-1(取上整)和至多M-1個關鍵字;(至少2個關鍵字)

5.非葉子結點的關鍵字個數=指向兒子的指針個數-1

6.非葉子結點的關鍵字:K[1], K[2], , K[M-1];且K[i] < K[i+1]

7.非葉子結點的指針:P[1], P[2], , P[M];其中P[1]指向關鍵字小於K[1]的子樹,P[M]指向關鍵字大於K[M-1]的子樹,其它P[i]指向關鍵字屬於(K[i-1], K[i])的子樹;

8.所有葉子結點位於同一層;

如:(M=3

 

紅黑樹

所有操作最壞情況:Ologn

而紅黑樹,能保證在最壞情況下,基本的動態幾何操作的時間均爲Olgn)。

 

ok,我們知道,紅黑樹上每個結點內含五個域,colorkeyleftright。如果相應的指針域沒有,則設爲NIL

 

一般的,紅黑樹,滿足以下性質,即只有滿足以下全部性質的樹,我們才稱之爲紅黑樹(近似平衡)

 

1)每個結點要麼是紅的,要麼是黑的。

2)根結點是黑的。

3)每個葉結點,即空結點(NIL)是黑的。

4)如果一個結點是紅的,那麼它的倆個兒子都是黑的。

5)對每個結點,從該結點到其子孫結點的所有路徑上包含相同數目的黑結點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章