樹
二叉樹
二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作"左子樹"(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樹每個節點的平衡因子只可能是-1、0和1(左子樹高度減去右子樹高度)。
通過單旋轉和雙旋轉操作可以將一個不平衡的二叉查找樹轉爲平衡。
伸展樹
所有最壞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)
紅黑樹
所有操作最壞情況:O(logn)
而紅黑樹,能保證在最壞情況下,基本的動態幾何操作的時間均爲O(lgn)。
ok,我們知道,紅黑樹上每個結點內含五個域,color,key,left,right。如果相應的指針域沒有,則設爲NIL。
一般的,紅黑樹,滿足以下性質,即只有滿足以下全部性質的樹,我們才稱之爲紅黑樹(近似平衡):
1)每個結點要麼是紅的,要麼是黑的。
2)根結點是黑的。
3)每個葉結點,即空結點(NIL)是黑的。
4)如果一個結點是紅的,那麼它的倆個兒子都是黑的。
5)對每個結點,從該結點到其子孫結點的所有路徑上包含相同數目的黑結點。