k叉树的性质_相关树及性质
二叉樹
性質:
第 n 層最多有 2n-1 個節點
深度為 k 的二叉樹最多有 2k - 1 個節點(滿二叉樹)
對于任何一顆二叉樹,如果其葉節點有 n0 個,度為2的非葉節點有 n2個,則有 n0 = n2 + 1
n個節點的完全二叉樹的深度為 ?log2n?+1
如果有一顆有n個節點的完全二叉樹的節點按層次序編號,對任一層的節點i(1
i
n)有
如果i=1,則節點i是二叉樹的根,無雙親,如果i>1,則其雙親節點為 ?i/2?
如果2i>n,則節點i沒有左孩子,否則其左孩子為2i
如果2i+1>n,則節點沒有右孩子,否則右孩子為2i+1
image
image
滿二叉樹
節點的度都是2且葉子節點都在同一層次上
是一種特殊的二叉樹
完全二叉樹
與滿二叉樹深度相同,并且編號一一對應的二叉樹
性質:
若 i
?n/2?,則結點i為分支結點,否則為葉子結點
最下面層的葉節點一定出現在左邊
深度為k的完全二叉樹,其最少的結點數=深度為 k-1 的滿二叉樹的結點數+1,即 2k-1個;其最多結點數=深度為k的滿二叉樹的結點數,即 2k-1
順序存儲完全二叉樹A[1,...,n],當 i
(n-1)/2 時,結點A[i]的右孩子是結點 A[2i+1]
哈夫曼樹(最優二叉樹)
性質:
有n個葉子結點
沒有度為1的結點
總的結點數為2n-1
深度
n-1
形態不唯一
要使一棵二叉樹的帶權路徑長度最小,必須使權值越大的葉子節點越靠近根節點,權值越小的節點越遠離根節點
利用哈夫曼樹可構造前綴編碼
最小生成樹
在連通網的所有生成樹中,所有邊的代價和最小的生成樹
看誰代價最小,來 PK 呀!P-prime, K-kruskal
prim算法
算法思想:從圖中任取一個頂點,把它當成一棵樹,然后從這棵樹的頂點相鄰的邊中選取權值最小的邊,并把這條邊相鄰的頂點并入樹中,此時得到一顆有兩個頂點的樹,然后繼續從這棵樹的兩個頂點相鄰的邊中選取一條最短的邊,將其和相鄰頂點再次并入樹中,重復操作直到所有頂點都被并入樹中。
prime算法圖解
kruskal算法
算法思想:每次從所有邊中選出權值最小的邊,將其并入樹中,重復操作直到所有頂點都被并入樹中。
kruskal算法圖解
圖片來源:https://blog.csdn.net/luoshixian099/article/details/51908175
二叉排序樹(二叉查找樹)
性質:空樹/如果左子樹不為空,則左子樹的所有結點的值均小于根節點;如果右子樹不為空,則右子樹的所有結點均大于根節點;左右子樹分別也是二叉排序樹。中序遍歷會得到一個有序序列。
既擁有類似于折半查找的特性,又采用了鏈表做存儲結構,它是動態查找表的一種適宜表示。其查詢效率高于鏈表結構。
二叉排序樹
AVL樹(平衡二叉樹)
它是二叉排序樹的一種改進,由于樹的高度越小,查找效率越高,所以盡可能的保持左右子樹高度平衡,會使得樹的高度達到最小。
性質:左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1。即就是平衡因子只會取 -1,0 ,1,因此此處的重點不斷的執行是平衡調整。
基于二分法的策咯提高數據查找速度的二叉樹的數據結構。
【例】若平衡二叉樹的高度為6,且所有非葉結點的平衡因子均為 1,則該平衡二叉樹的結點總數為20
B樹(多路平衡查找樹)
B樹(B-tree)是在AVL樹基礎上的一種升級,它是各個節點平衡因子都為0的多路平衡查找樹。
B樹一開始是針對機械磁盤而設計的,因為機械磁盤的磁頭跳轉消耗的時間比較多,為了減少跳轉的次數,所以設計了B-Tree。B樹的目標是在 O(logn) 時間復雜度內,完成一些動態操作。這種數據結構多用于實現數據庫索引。紅黑二叉樹的時間復雜度也是 O(logn) ,但是B樹可以比紅黑二叉樹存儲更多的節點。屬于查找的應用。
一顆3階B樹
一顆4階B樹
一顆 m 階的B樹,或為空樹,或為滿足下列特性的 m 叉樹:
(1)樹中的每個結點
;
(2)若
不是葉子結點,則
,
;
,
;
(3)除根結點外,
,
;
,
;
【例】在一棵高度為2的5階B樹中,所含關鍵字的個數最少是5。因為根結點關鍵字是5個的時候會產生分裂,高度正好變為2
(4)n個結點的m階B樹的
范圍:
(5)n個非葉結點的m階B樹
包含的關鍵字個數:
(6)所有葉節點都在同一層
B樹中的葉結點又叫外部結點,類似于查找判定樹的查找失敗結點,實際上這些點并不存在。
結合下例理解:
一棵5階B樹
一棵5階B樹特點總結
B樹的關鍵字插入和刪除操作:
插入操作涉及到結點分裂的問題
image.png
刪除操作涉及到結點合并的問題
情況一: 被刪關鍵字是非終端結點,則先用其前驅或后繼結點替代它,使得被刪結點落到終端結點,然后走情況二;
先用前驅結點替代被刪結點
情況二: 被刪關鍵字在終端結點
step1. 結點關鍵字個數
?m/2?,直接刪除,否則走step2
step2. 兄弟夠借:被刪關鍵字所在的結點關鍵字個數為?m/2?-1 ,其左/右兄弟結點關鍵字個數
?m/2?,此時采用“父子換位法“執行刪除操作;否則走step3
step3. 兄弟不夠借,被刪關鍵字所在的結點關鍵字個數為?m/2?-1 ,其左/右兄弟結點關鍵字個數也是?m/2?-1,則需將左/右兄弟結點關鍵字與父級結點關鍵字進行合并
image.png
B+樹
B+樹是應數據庫所需而生的一種B樹的變形樹,相對于B樹來說B+樹更充分的利用了節點的空間,磁盤讀寫代價更低,查詢速度更加穩定,其速度完全接近于二分法查找。適應于操作系統中的文件索引和數據庫索引。B+樹既能順序查找,也能索引查找。
一顆4階B+樹
一棵m階的B+樹需滿足下列條件:
(1)每個分支結點最多有 m 顆子樹(孩子結點);
(2)根結點(若不是葉結點)至少有1個關鍵字,2顆子樹,至多m個關鍵字,m顆子樹;其它非葉結點至少有?m/2?個關鍵字,?m/2?顆子樹,至多有m個關鍵字,m顆子樹;
(3)結點的子樹個數與關鍵字個數相等;
(4)所有葉結點包含全部關鍵字以及指向相應記錄的指針,葉結點中將關鍵字按大小順序排列,并且相鄰葉結點按大小順序相互鏈接起來。
(5)所有分支結點(可視為索引的索引)中僅包含它的各個子結點(即下一級的索引塊)中關鍵字的最大值及指向其子結點的指針;
一顆m階的B+樹與B樹的差異在于:
(1)在B+樹中,具有n個關鍵字的結點只含有n棵子樹,即每個關鍵字對應一顆子樹;在B樹中,具有n個關鍵字的結點含有n+1顆子樹
(2)在B+樹中,每個結點(非根內部結點)的關鍵字個數 n 的范圍是?m/2?
n
m(根節點:1
n
m);在B樹,每個結點(非根內部結點)的關鍵字個數n的范圍是?m/2?-1
n
m - 1(根節點:1
n
m - 1)
(3)在B+樹中,葉結點包含信息,所有非葉結點僅起索引作用,非葉結點中的每個索引項只含有對應子樹的最大關鍵字和指向該子樹的指針,不含有該關鍵字對應記錄的存儲地址。
(4)在B+樹中,所有葉子結點中包含了全部關鍵字的信息,以及指向這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接;即在非葉結點中出現的關鍵字也會出現在葉節點;而在B樹中,葉結點包含的關鍵字和其它結點包含的關鍵字是不重復的。
紅黑樹
紅黑樹(Red Black Tree) 是一種自平衡二叉查找樹,它是一種特化的AVL樹,都是在進行插入和刪除操作時通過特定操作保持二叉查找樹的平衡,從而獲得較高的查找性能。若一棵二叉查找樹是紅黑樹,則它的任一子樹必為紅黑樹。
性質:
(1)節點是紅色或黑色;
(2)根節點是黑色;
(3)所有葉子都是黑色;
(4)每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
(5)從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點;
應用:紅黑樹已廣泛應用Linux 的進程管理、內存管理,設備驅動及虛擬內存跟蹤等一系列場景中。
鍵樹(數字查找樹)
是一顆度
2的樹,樹中的每個結點中不是包含一個或幾個關鍵字,而是只含有組成關鍵字的符號。
總結
以上是生活随笔為你收集整理的k叉树的性质_相关树及性质的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python下的xml创建以及追加信息,
- 下一篇: java对象list_java 8 从一