430 likes | 558 Views
Chapter 4. 二元樹的基本概念. 4.1 名詞定義. 樹狀結構實際上也是一種階層化( hierachy) 的結構,在生活中,血統表、組織結構表等都是樹狀結構的例子,圖4-1-1就是一棵樹的例子。. 4.1 名詞定義. 定義: 「樹」 ( tree) 是由一個或多個節點組成的有限集合,滿足 1.有一特定節點,稱之為樹根( root)。 2. 其餘節點分成 n≧0 個互斥集合。 T 1 ,T 2 , … ,T n 稱為樹根的「子樹」( subtree)。 圖4-1-1中, A 為樹根, T 1 、T 2 、T 3 也是一棵樹,作為 A 的子樹。
E N D
Chapter 4 二元樹的基本概念
4.1 名詞定義 • 樹狀結構實際上也是一種階層化(hierachy)的結構,在生活中,血統表、組織結構表等都是樹狀結構的例子,圖4-1-1就是一棵樹的例子。
4.1 名詞定義 • 定義:「樹」(tree)是由一個或多個節點組成的有限集合,滿足 1.有一特定節點,稱之為樹根(root)。 2.其餘節點分成n≧0個互斥集合。T1,T2,…,Tn稱為樹根的「子樹」(subtree)。 • 圖4-1-1中,A為樹根,T1、T2、T3也是一棵樹,作為A的子樹。 • 關於樹,有許多常用的名詞,底下將以圖4-1-1為例說明: *
4.1 名詞定義 • 分支度(degree)每個節點的子樹個樹。 如節點A的分支度為3,B的分支度分別為2 • 樹葉(leaf)或終端點(terminal nodes)分支度為0的節點。 如節點{K , L , F , G , M , I } • 非終端節點(nonterminal nodes)分支度不為0的節點。 如節點{A, B, C, D, E, H} *
4.1 名詞定義 • 兒子(children)與父親(parent)在上的節點叫父親,在下的則叫兒子,因此B的兒子是{E、F},B的父親是A。 • 兄弟(siblings)同一父親的節點。例如節點{H、J、I}是兄弟。 • 祖先(ancestors)指由樹根到該節點路徑上的所有節點。例如M的祖先為節點{A、D、H}。 *
4.1 名詞定義 • 階度(level)定義階度時,先定義樹根的階度為1,若某節點的階度是P,則其兒子的階度為P+1。 圖4-1-1右方列出了每一節點的階度。 • 深度(depth)或高度(height)樹所有節點中最大階度者。 圖4-1-1的樹深度就是4。 *
4.1 名詞定義 • 路徑(path)由一串不同節點所組成,經過這些節點後,可由一節點到達另一節點。如由經A到L的路徑為A、B、E、L,在樹狀結構中,不同節點間的路徑一定不同。 • 路徑長(path lenght)由一節點至另一節點所經過的邊數,例如由A節點至L節點的路徑長為3,至I的路徑長為2。 *
4.1 名詞定義 • 有序樹(bordered tree)與非有序樹(unordered tree)有序樹中的子節點排列具有某些意義,因此當我們表示結構時,就必須依此順序,下面要介紹二元樹就是有序樹的一種,而非有序樹其子節點表示法不唯一。 • 多向樹(multiway tree)如果樹的每一節點有固定的子節點數目,而且其排列次也具有特殊意義,則稱為「多向樹」。 *
4.1 名詞定義 • 定義:「森林(forest)」是指n≧0棵互斥樹的集合。 *
4.1 名詞定義 • 若節點最多只有二個兒子(children),這個樹狀結構就是二元樹(binary tree)。 *
4.1 名詞定義 • 定義:「二元樹」(binary tree)是一個有限節點的集合,可能是空的或是包含一樹根或二棵互斥的二元樹,稱為左(left)和右(right)子樹,而左子樹右子數也個是一棵二元樹。 • 二元樹與樹是有所不同的:1.二元樹分成左子樹和右子樹,但一般樹的子樹次序並無關緊要。2.二元樹是准許空樹,但一棵樹則至少有一樹根節點。 *
4.1 名詞定義 • 圖4-1-4的樹狀結構稱之為歪斜樹(skewed tree),向左歪斜者稱之為「左歪斜樹」,向右歪斜者,則稱之為「右歪斜樹」。 *
4.1 名詞定義 下面介紹二種特殊的二元樹: • 定義:「全滿二元樹」(full binary tree)是一深度為K的二元樹,其節點樹恰好2k-1個。 • 圖4-1-5是一深度為4的全滿二元樹,其節點樹共15個。 *
4.1 名詞定義 • 定義:「完整二元樹」(complete binary tree)是一深度K的二元樹,其所有的樹葉均在階度K和K—1,且階度K上的樹葉均在左邊,小於K—1階度的節點均有兩個兒子。
4.2 二元樹的基本性質 • 性質一:(1) 二元樹第i階度的節點樹最多2i-1個,i≧1。(2) 深度為K的二元樹,節點樹最多有2k-1個,k≧1。 • 性質二:非空之二元樹中,設n0代表樹葉數,n2代表分支度為2的節點樹,則n0=n2+1 • 性質三:對N個節點的二元樹而言,其高度至少為「log2(N+1)」,若此二元樹洽為完全二元樹,則其高度為log2(N+1)。 *
4.2 二元樹的基本性質 • 性質四:二元樹的計數(count)n個節點共能組成 種不同的二元樹。 說明:
4.2 二元樹的基本性質 1.設bn代表所能排出的二元樹總數,則bn= bibn-i-1 b0=1= b0 bn-1+b1bn-2+……+bn-2 b1+bn-1b0 2.令B(X)= bnXn則B(X)=b0+ (b0bn-1+b1bn-2+……+bn-2 b1+bn-1b0)Xn B(X)-b0=X (b0bn-1+b1bn-2+……+bn-2 b1+bn-1b0)Xn=X ( b0bn+b1bn-1+……+bn-1 b1+bnb0)Xn =XB2(X) (註:若CnXn=(AnXn)(bnXn) 則Cn=A1bn-1) *
4.2 二元樹的基本性質 3.解方程式 *
4.2 二元樹的基本性質 • 性質五:對一具n個節點的完整二元樹,若 • 則1.若i≠1,則PARENT(i)在位置「i/2」。i=1,i為樹根,沒有父親。2.若2i≦n,則LCHILD(i)在位置2i。若2i>n,i沒有左兒子。3.若2i+1≦n,則RCHILD(i)在位置2i+1。若2i+1>n,則i沒有右兒子。 *
4.3 二元樹的表示法 • 二元樹的表示法一般有兩種形式: 1.陣列表示法二元樹中的每一個節點由leftchild、rightchild、data三個欄位所構成,而leftchild,rightchild又是一節點,以圖4-1-6為例,表示法如下: *
leftchild data rightchild 1 2 A 3 2 4 B 5 3 6 C 7 4 8 D 9 5 0 E 0 6 0 F 0 7 0 G 0 8 0 H 0 9 0 I 0 4.3 二元樹的表示法 *
4.3 二元樹的表示法 2.鏈結表示法 • 二元樹中的任一節點由leftchild,rightchild指標及data三個欄位所構成,即 *
4.4 樹及森林的追蹤 • 追蹤在於樹狀結構非常基本,在此我們一共考慮三種不同的追蹤方式: 1.前序(preorder) 2.中序(inorder) 3.後序(postorder) • 又被追蹤的結構有二元樹、一般樹及森林。 *
4.4 樹及森林的追蹤 1.二元樹 • 對二元樹而言,其三種追蹤方式的演算法如下: • (1)前序追蹤若非空二元樹 1.拜訪根節點 2.以前序追蹤左子樹 3.以前序追蹤右子樹 *
4.4 樹及森林的追蹤 • (2)中序追蹤若非空二元樹 1.以中序追蹤左子樹 2.拜訪根節點 3.以中序追蹤右子樹 • (3)後序追蹤若非空二元樹 1.以後序追蹤左子樹 2.以後序追蹤右子樹 3.拜訪根節點 *
4.4 樹及森林的追蹤 • 以圖4-4-1的算術為例, *
4.4 樹及森林的追蹤 • 其追蹤結果如下: 前序:/+-+ab*c+def+g*hi 中序:((a+b)-c*(d+e)+f)/(g+h*i) 後序:ab+cde+*-f+ghi*+/ *
4.4 樹及森林的追蹤 • 若已知二元樹之前序與中序追蹤,或中序與後序追蹤,則決定唯一二元樹,但若前序與後序追蹤相同,此樹並非唯一,但若假設二元樹如下: • 並設T’:表前序追蹤二元樹TT”:表後序追蹤二元樹T *
T1=ø TR=ø T1≠ø TR=ø T1=ø TR≠ø T1≠ø TR≠ø 前序 R RT1’ RTR’ RTL’TR’ 後序 R TL”R TR”R TL”TR”R 4.4 樹及森林的追蹤 • 則此樹所對應的追蹤結果如下(設ø代表空樹) *
4.4 樹及森林的追蹤 • 因此若有一樹TL’=TR’且TL”=TR” ,則不同的二元樹會有相同的前序及後序追蹤,如圖4-4-2的二元樹所示: *
4.4 樹及森林的追蹤 • 若設一二元樹其追蹤結果如下:前序 ABCDEFGHI後序 CBAEDGHFI • 則用遞迴的方式,可決定出此樹,其過程如下: (1)由前序知A為此樹之樹根,由中序則可得左子樹為{B、C},右子樹為{D、E、F、G、H、I},所以可得下圖 *
4.4 樹及森林的追蹤 (2)以相同的程序處理左子樹及右子樹。如圖4-4-3所示。 *
4.4 樹及森林的追蹤 2.一般樹與森林的追蹤 • 設有一樹T含有n個節點,若樹根R,其餘節點分成m個子樹T1、T2…Tm,如下所示。 *
4.4 樹及森林的追蹤 • 則其追蹤法如下: • (1)前序追蹤若非空二元樹 1.拜訪根節點 2.以前序追蹤T1 3.以前序追蹤T2、T3…Tm *
4.4 樹及森林的追蹤 • (2)中序追蹤若非空二元樹 1.以中序追蹤T1 2.拜訪根節點 3.以中序追蹤T2、T3…Tm • (3)後序追蹤若非空二元樹 1.以後序追蹤T1 2.以後序追蹤T2、T3…Tm 3.拜訪根節點 *
4.4 樹及森林的追蹤 • 以圖4-4-4為例, 前序 ABCDEFGHI 中序 CDEBGHIFA 後序 EDCIHGFBA *
4.4 樹及森林的追蹤 • 而森林的追蹤與樹的追蹤法大同小異,以圖4-4-5為例,其追蹤結果如下 前序 ABCDEFGHI 中序 EBCDAGHFI 後序 FDCBHGIFA • 這種追蹤法在遊戲樹(game tree)中常常使用到。 *
4.5 樹的二元化 • 當一棵樹的任一節點最多k有個兒子,這棵樹則稱為k二元樹(kary tree),然而當我們不論使用陣列或鏈結表示法,每一個紀錄的長度都要能儲存k個子樹的位置,但若在類似稀疏樹的結構下,所浪費的記憶體非常可觀,但在二元樹表示法下,所浪費的記憶空間較少,同時許多性質也較能確定。所以我們常將一般樹轉化成二元樹,以圖4-5-1(a)為例,其轉化步驟如下: *
4.5 樹的二元化 • 其轉化步驟如下: • (1)將個樹樹根連接起來。 • (2)將個樹利用左端子節點、右邊兄弟各點(left—child—sibling)規則轉化成二元樹。 • 再看看森林的追蹤次序與所對應二元樹追蹤之關係,如圖4-5-1(a),讀者可自行驗證,其中前序追蹤與中序追蹤等兩者次序相同,而後序追蹤則有所區別。 *