一、二叉平衡樹的時間複雜度
在資料結構(五):樹中的二叉查詢樹中,我們發現當二叉樹平衡時,我們查詢乙個元素需要遍歷的層級是log(n+1),按照大o演算法可得時間複雜度為logn,這種查詢比鍊錶和陣列的o(n)演算法要
高效得多。
但是當二叉樹不平衡時,我們發現它的查詢效率依舊是o(n),比如如下情況:
二、2-3樹概述
為了保證二叉樹的平衡,提高樹查詢的效率,減少遍歷的層級,我們允許乙個結點保留多個鍵,並且鏈結的不止兩條鏈
2-結點:
含有乙個鍵和兩條鏈,左鏈指向的鍵都小於該結點,右鏈指向的鍵都大於該結點
3-結點:
含有兩個鍵和三條鏈,左鏈指向的鍵都小於該結點,右鏈指向的鍵都大於該結點,中鏈指向的的鍵介於該結點的兩個鍵之間
注:2-3樹中不允許有大於等於3個鍵的結點存在
三、2-3查詢樹
2-3樹的查詢思路與二叉查詢樹相似,對於需要查詢的鍵,從根結點開始遍歷,小於往左,大於則往右,當找到3-結點時,若查詢的鍵介於3-結點的兩個鍵之間,則找中鏈結對應的結點,命中則返回。
查詢過程沒命中時則繼續遞迴查詢子樹。
如圖:查詢鍵為h的結點,首先找根結點m,由於h
查詢到左子樹為3-結點,判斷h>e並且h
四、2-3樹的插入
往2-3樹中插入結點的思路和二叉樹一致,首先進行查詢,根據2-3樹的特性將結點掛到合適的位置,保持樹的平衡。由於2-3樹既包含2-結點同時也包含3-結點,因此在插入時針對不同型別的結點
有不同的處理方式:
一、往2-結點中插入新鍵
插入k:往2-結點中插入新鍵時,我們可以保證樹層級不變的基礎上,將2-結點轉化為3-結點
二、往只有乙個3-結點中插入新鍵
往3-根結點中插入s
將中鍵提公升為根結點,左右兩鍵成為左右子樹
三、往乙個父結點為2-結點的3-結點中插入新鍵
往該2-3樹中插入元素z
將3-結點的中間元素往上提
四、往乙個父結點為3-結點的3-結點中插入新鍵
往該2-3樹中插入元素d
將插入後形成的3-結點往上提
將形成的3-父節點再次取中間值往上提公升一層
五、插入結點到根結點的路徑上是3-結點
往該2-3樹中插入d
將插入後形成的3-結點取中間值往上提
將形成的3-根結點再次分解
五、2-3樹總結
5.1平衡的2-3樹特性:
(1)任意空鏈結到根結點的長度是相等的
(2)非根結點的4-(3個鍵)結點變化為3-結點時,樹高不變,只有當4-結點為根結點,分解後樹的高度才會+1
(3)2-3樹與普通二叉樹相比,不同的是2-3樹自底向上生長,普通二叉樹自頂向下生長。
5.2引入2-3樹思想的理由
2-3樹本身的實現是很困難的,引入2-3樹的思想是為了下一章節的紅黑樹做鋪墊
資料結構(六) 複雜樹之紅黑樹
一 紅黑樹概述 紅黑樹是對2 3樹的編碼,即用二叉樹結點單鍵單值的形式來表示2 3樹,具體措施是對兩個結點相連的鏈結標記顏色。二 紅黑樹特性 1 紅鏈結都為左鏈結 2 沒有任何乙個結點同時和兩條紅色鏈結相連 3 紅黑樹是完美平衡的二叉樹,即任意空鏈結到根結點的黑鏈結數量相等 4 紅黑樹的根結點鏈結永...
資料結構 六 樹
一直對樹的概念比較模糊,什麼紅黑樹啊,二叉搜尋樹等很多沒有乙個完整的知識體系結構,所以今天準備花一天的時間做乙個總結,力求搞明白樹的全部知識,不同樹之間的體系結構,以及一些常見應用。樹的定義有兩種方式。樹 tree 是包含n n 0 個結點的有窮集,其中 樹也可以這樣定義 樹是由根結點和若干顆子樹構...
資料結構 六 樹
未完待續 樹的概念 子樹 根結點 內部結點 葉結點或終端結點 深度或高度 根為第一層,根的孩子為第二層,依次類推,樹中結點最大的層數就稱為深度或高度。在樹中,如果任意乙個結點的子樹,從左到右都是有次序的,那麼這棵樹被稱為有序樹,反之則為無序樹。森林 由多棵不相交的樹的集合。樹的儲存結構 雙親表示法 ...