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