1. 程式人生 > >Ikaros的資料結構之二叉樹(基礎概念部分)

Ikaros的資料結構之二叉樹(基礎概念部分)

二叉樹(Binary Tree)

在瞭解二叉樹之前你需要了解如下內容:

1.樹(Tree):是一種非線性資料結構(非線性資料結構包含) ①樹的資料結構: 樹的資料結構 相關術語 a.根節點(root):樹中沒有前驅的結點 :一棵樹中只有一個根節點 b.葉子結點(leaf):沒有後繼的結點 :一棵樹中可有多個葉子結點 ②各結點之間的關係 a.雙親結點與子女結點  雙親結點是子女結點前驅,子女結點是雙親結點的後繼 :Ⅰ.根節點無雙親,葉子節點無子女   Ⅱ.除根結點外剩餘所有結點向上只有一個雙親結點   Ⅲ.除葉子結點外剩餘所有結點向下可有(包含一個)多個子女結點 b.兄弟結點:同一個雙親結點的子女結點之間互稱兄弟結點 ③

a.結點的度:一個結點的子女個數(葉子結點度為0) b.樹的度:樹中度值最大的結點的度(設樹的度為k(k>2),則稱該樹為k叉樹) ④樹的深度:樹的層次數

對樹狀結構的特點的總結

1.有且只有一個結點無前驅(根結點) 2.可有多個結點無後繼(葉子結點) 3.除根結點,葉子結點外:其餘結點均只有一個雙親,但可以有(包含一個)多個子女結點

接下來,我們進入正題:二叉樹

1.定義:度值最大為2的樹

2.形態: 二叉樹的形態 3.二叉樹的資料結構表示 樹 ①二元組表示法 這種表示法需要包含兩方面內容:①樹中的結點成員②各結點成員之間的連線關係 首先,我們以Tree2為例:   Data={A,B,C,D}   Relation={<A,B>,<B,C>,<C,D>} 然後,我們試著來表示Tree1:   Data={A,B,C,D,E,F,G,H,I,J}   Relation={<A,B>,<A,C>,<B,D>,<B,E>,<C,F>,<D,G>,<E,H>,<E,I>,<F,J>}

②廣義表表示法:根節點(左子女,右子女) 仍然以Tree1為例: A(B,C) B(D,E) C(,F) D(G) E(H,I) F(J) 以上過程只是為了讀者更好的理解,接下來才是用廣義表表示法表示的結果:   A(B(D(G),E(H,I)),C(,F(J))) 注:當只有左結點時,逗號可被省去;但是當只有右結點時,逗號不可省,否則會被誤以為時左結點

以上這兩種方法通常用在文件中,實際更多情況中用畫圖更多一些

4.二叉樹的性質特點 a.任意一棵非空二叉樹的葉子結點總比雙分支結點多一個 證明:(證明過程中遵循的原則:結點總個數守恆) 因為在二叉樹中,共有三類雙親結點:①有0個子女結點的雙親結點(葉子結點)②有1個子女的雙親結點③有2個子女結點的雙親結點 設有0個子女結點的雙親結點的個數為n0,有1個子女結點的雙親結點的個數為n1,有2個子女結點的雙親結點的個數為n2 若把二叉樹中的所有結點都看作雙親結點,樹中的結點總數為:n2+n1+n0

若把二叉樹中的所有結點都看作子女結點,那麼子女結點可以分為根節點和除根結點外的所有結點(根節點和 其他結點的區別在於根結點沒有雙親結點,而其他結點都有雙親結點),所以其他結點的個數為n1+2*n2,則樹中的結點總數為n1+2*n2+1 又因為樹中的結點總數始終保持不變,所以:    n2+n1+n0=n1+2*n2+1 顯而易見可得: n0-n2=1   又因為n0表示子女結點個數為0的雙親結點的個數,即葉子結點的個數,而n2表示子女結點個數為2的雙親結點的個數,即雙分支結點的個數   所以任意一棵非空二叉樹的葉子結點總比雙分支結點多一個 b.總結點個數為n的二叉樹有n-1條邊 證明:現有一個根結點,要使二叉樹中結點總個數為n,則還需增加n-1個結點,又因為每新增加一個結點,二叉樹中就新增加1條邊,則增加n-1個結點,就增加了n-1條邊。所以總結點個數為n的二叉樹有n-1條邊

5.常見的幾種二叉樹 a.滿二叉樹   對二叉樹按層編號:0,1,2……   編號為i的層最多隻有2^i個結點(每層結點個數最大值)   若一棵h層的二叉樹的每一層的結點個數都達到最大值,則稱這棵二叉樹為滿二叉樹 h層的滿二叉樹 b.完全二叉樹:一棵h層的完全二叉樹 特點:①前h-1層是滿的    ②最後一層連續缺失右邊的結點(注:這裡右邊的結點並不是右子女結點,而是相對於左邊的結點而言的) h層的完全二叉樹滿二叉樹是特殊的完全二叉樹: 滿二叉樹是特殊的完全二叉樹 ④要麼只有一個單分支結點,要麼沒有: 二叉樹 ⑤若結點總個數為奇數,單分支結點個數為0;若n為偶數,單分支結點個數為1 ⑥根據完全二叉樹的結點總個數來判斷該二叉樹的層數 設該完全二叉樹有h層,結點個數為n 則n滿足2h-1-1<n<=2h-1 即2h-1<n+1<=2h 假設該二叉樹的n=700,則210-1<700+1<=210,顯而易見,h=10,該二叉樹有10層 c.理想平衡二叉樹(理想樹)   前h-1層是滿的,最後一層隨意擺放 結論:滿二叉樹是完全二叉樹的子集,完全二叉樹為理想二叉樹的子集 d.歪斜樹:結點偏向於左邊或右邊的樹

6.對任意一棵二叉樹按層從上到下,從左至右對結點進行編號(1,2,3,4,5……)  注意:對缺失的結點也要編號 則編號為i的結點若有左子女結點,那麼編號為2i;若有右子女結點,則編號為2i+1。  編號為i(i>1)的結點的雙親結點的編號為:[i/2] ([]表示對結果取整)

(。・∀・)ノ本節結束!!!