資料結構之二叉樹

2021-10-11 07:44:37 字數 4056 閱讀 7498

二叉樹的應用

二叉樹的資料結構

樹的周遊演算法

樹的平衡

問與答其他樹

樹的乙個節點擁有多少個子節點取決於樹的型別,這個量值稱為樹的分支因子,它決定了當插入節點是,樹的分支擴充套件速度。二叉樹的分支因子為2。二叉樹是一種將節點按照層次結構組織起來的資料結構,每個節點最多只有兩個與它直接相關聯的子節點。

二叉樹是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:

1、空二叉樹——如圖(a);

2、只有乙個根結點的二叉樹——如圖(b);

3、只有左子樹——如圖(c);

4、只有右子樹——如圖(d);

5、完全二叉樹——如圖(e)。

①結點:包含乙個資料元素及若干指向子樹分支的資訊 。

結點的度:乙個結點擁有子樹的數目稱為結點的度 。

③葉子結點:也稱為終端結點,沒有子樹的結點或者度為零的結點 。

④分支結點:也稱為非終端結點,度不為零的結點稱為非終端結點。

樹的度樹中所有結點的度的最大值

⑥結點的層次:從根結點開始,假設根結點為第1層,根結點的子節點為第2層,依此類推,如果某乙個結點位於第l層,則其子節點位於第l+1層。

樹的深度:也稱為樹的高度,樹中所有結點的層次最大值稱為樹的深度 。

⑧有序樹:如果樹中各棵子樹的次序是有先後次序,則稱該樹為有序樹 。

⑨無序樹:如果樹中各棵子樹的次序沒有先後次序,則稱該樹為無序樹。

⑩森林:由m(m≥0)棵互不相交的樹構成一片森林。如果把一棵非空的樹的根結點刪除,則該樹就變成了一片森林,森林中的樹由原來根結點的各棵子樹構成 。

1、滿二叉樹:如果一棵二叉樹只有度為0的結點和度為2的結點,並且度為0的結點在同一層上,則這棵二叉樹為滿二叉樹。

2、完全二叉樹:深度為k,有n個結點的二叉樹當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從1到n的結點一一對應時,稱為完全二叉樹。

完全二叉樹的特點是葉子結點只可能出現在層序最大的兩層上,並且某個結點的左分支下子孫的最大層序與右分支下子孫的最大層序相等或大1。

(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);

(2) 深度為h的二叉樹最多有2^h-1個結點(h>=1),最少有h個結點;

(3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,

則n0=n2+1;

(4) 具有n個結點的完全二叉樹的深度為int(log2n)+1

(5)有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:

若i為結點編號則 如果i<>1,則其父結點的編號為i/2;

如果2i<=n,則其左兒子(即左子樹的根結點)的編號為2i;若2i>n,則無左兒子;

如果2i+1<=n,則其右兒子的結點編號為2i+1;若2i+1>n,則無右兒子。

(6)給定n個節點,能構成h(n)種不同的二叉樹。h(n)為卡特蘭數的第n項。h(n)=c(n,2*n)/(n+1)。

這是一種資料壓縮方法,該方法用一棵霍夫曼樹來壓縮一組資料。霍夫曼樹是一顆二叉樹,它能夠保證按照最優的方式將編碼賦給資料中的符號。出現頻率高的符號將被賦予較短的編碼,而出現頻率低的符號將被賦予較長的編碼。

在使用者圖形介面中,視窗按照層次結構組織成一棵樹,除了頂部視窗外,每個視窗都擁有乙個父視窗,而每個視窗可能擁有多個子視窗。在檔案系統中,目錄和目錄之間也有相同的組織方式。

特別是針對那些同事需要滿足高效率的順序和隨機訪問,而且還要經常執行插入和刪除操作的系統。b樹擁有很大的分支因子,大致可歸類為平衡搜尋樹。

這個任務是編譯器和手持式計算器經常做的,一種處理算數表示式的自然方法是通過表示式樹,這是一種按照表示式的運算元和操作符按照層次結構組織起來的一棵二叉樹。

ai方面的許多問題都是採用決策樹來解決。決策樹的節點代表問題的狀態,每個節點都是乙個決策點,必須在當前決策點做出選擇以使得問題繼續求解下去。

優先順序佇列是一種資料結構,它採用一棵二叉樹來記錄集合中的哪個元素將擁有下乙個最高的優先順序。與將一組資料全部排序相比,優先順序佇列提供了更好的解決方案。

二叉樹中的每個節點都包含三個部分:乙個資料成員和兩個左右指標。如果某個節點沒有相對應左子節點或右子節點,就將相應的指標設定為null。

周遊一棵二叉樹意味著按照某種順序依次訪問樹的每乙個節點。一般有四種周遊演算法:先序遍歷、中序遍歷、後序遍歷以及層級遍歷。

先序遍歷

遍歷順序:根->左->右,先序遍歷是按照深度優先的方式遍歷節點的。

中序遍歷

遍歷順序:左->根->右,對於二叉搜尋樹,中序遍歷得到的節點陣列是公升序的

後序遍歷

遍歷順序:左->右->根。

層級遍歷首先訪問樹的根,然後依次向下層處理,按照從左到右的順序訪問每層的節點。層級遍歷採用了廣度優先的策略。

樹的平衡是指對於給定數量的節點,保證樹的高度盡可能短的過程。這意味著在節點加入下一層之前必須保證本層的節點滿額。正式的說法是:如果滿足樹的所有葉子節點都在同一層上,或者所有葉子節點都在最後兩層上,且倒數第二層是滿的,則這棵樹是平衡的。

如果乙個平衡樹最後一層的所有葉子節點都在最靠左邊的位置,則稱這棵樹是左平衡的。左平衡樹可以幫助實現堆和優先順序佇列。

一般來說,維護附加的指標為遍歷樹時提供了更加靈活的方式。比如維護父節點與子節點之間的指標,能使我們自上而下或者自下而上遍歷這棵樹。維護兄弟之間的指標可以使得不必先訪問父節點就能方便地遍歷子節點。連線兄弟節點帶來的好處在b+樹中可以找到,這是一種使用指標將葉子節點連線在一起的平衡搜尋樹。通過鏈結葉子節點,能夠有效地在書的最底端形成乙個鍊錶。這提供了一種按照順序查詢特定的節點,並檢索要麼在其之前或在其之後節點的高效方法。資料庫系統採用這種方法來同時支援高效的隨機和順序訪問。當然缺點就是多了一些儲存指標的開銷,而且在插入和移除子節點時,管理兄弟節點的指標比較複雜。

二叉搜尋樹中的最小節點是最左邊的葉子節點。要定位到該節點,需要從根節點開始通過左指標逐層下降,直到到達該分支的邊緣。在非平衡二叉搜尋樹中,最壞的情況需要o(n)的時間,n為節點個數。平衡二叉樹下,複雜度為o(lg n)。查詢最大的節點與查詢最小的節點類似,複雜度也相同,只不過最大的節點為最右端的葉子節點。

對於給定的節點個數,分支因子大能夠保持這個數的高度較低,也就使樹能夠保持相對的平衡性。因此,在對於書的高度尤其敏感的應用中,採用分支因子較大的樹是更好的選擇。

在乙個二叉搜尋樹中,某節點x的後繼節點是指x之後的下乙個最大節點。例如一棵二叉樹中包含鍵值3,6,9,11,22,66,於是11的後繼為22.要在二叉搜尋樹中確定x的後繼節點,首先要定位到x,然後移動到x的右子節點,從這個節點開始,逐層訪問左節點,其最左端的葉子節點就是x的後繼節點。定位到x以及x的後繼節點的時間複雜度都是o(lg n)。

k叉樹的分支因子為k,節點的分支因子大於2對某些特定的場景的建模很有幫助。比如在圖形視窗系統中父視窗與其子視窗之間的1對n的關係,或者檔案系統中的目錄結構。

紅黑樹是每個節點都帶有顏色屬性的自平衡二叉樹,節點顏色要麼為紅色要麼為黑色。通過在分支中規定節點著色的規則,紅黑樹能夠確保每個分支都不會長於其它分支的2倍。紅黑樹的最長執行時間為t(n)=2klgn,這裡n是樹中節點的個數,k為某個常量。而完全平衡二叉樹的搜尋時間為t(n)=klgn。

trie搜尋樹主要用來查詢變長字串的組合。

資料庫系統通常使用b樹來提高訪問輔助儲存裝置上的資料的效能。一般來說,通過優化手段使得節點大小和輔助儲存裝置的塊大小保持一致。所有型別的b樹都是平衡的,且一般都有較大的分支因子。這使得書的高度較小,於是為了得到某條記錄必須遍歷的層級減少了,從而減少了io操作帶來的開銷。

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...

資料結構之二叉樹

定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...

資料結構之二叉樹

來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...