1 / 43

Chapter 4

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 的子樹。

Download Presentation

Chapter 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 4 二元樹的基本概念

  2. 4.1 名詞定義 • 樹狀結構實際上也是一種階層化(hierachy)的結構,在生活中,血統表、組織結構表等都是樹狀結構的例子,圖4-1-1就是一棵樹的例子。

  3. 4.1 名詞定義 • 定義:「樹」(tree)是由一個或多個節點組成的有限集合,滿足 1.有一特定節點,稱之為樹根(root)。 2.其餘節點分成n≧0個互斥集合。T1,T2,…,Tn稱為樹根的「子樹」(subtree)。 • 圖4-1-1中,A為樹根,T1、T2、T3也是一棵樹,作為A的子樹。 • 關於樹,有許多常用的名詞,底下將以圖4-1-1為例說明: *

  4. 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} *

  5. 4.1 名詞定義 • 兒子(children)與父親(parent)在上的節點叫父親,在下的則叫兒子,因此B的兒子是{E、F},B的父親是A。 • 兄弟(siblings)同一父親的節點。例如節點{H、J、I}是兄弟。 • 祖先(ancestors)指由樹根到該節點路徑上的所有節點。例如M的祖先為節點{A、D、H}。 *

  6. 4.1 名詞定義 • 階度(level)定義階度時,先定義樹根的階度為1,若某節點的階度是P,則其兒子的階度為P+1。 圖4-1-1右方列出了每一節點的階度。 • 深度(depth)或高度(height)樹所有節點中最大階度者。 圖4-1-1的樹深度就是4。 *

  7. 4.1 名詞定義 • 路徑(path)由一串不同節點所組成,經過這些節點後,可由一節點到達另一節點。如由經A到L的路徑為A、B、E、L,在樹狀結構中,不同節點間的路徑一定不同。 • 路徑長(path lenght)由一節點至另一節點所經過的邊數,例如由A節點至L節點的路徑長為3,至I的路徑長為2。 *

  8. 4.1 名詞定義 • 有序樹(bordered tree)與非有序樹(unordered tree)有序樹中的子節點排列具有某些意義,因此當我們表示結構時,就必須依此順序,下面要介紹二元樹就是有序樹的一種,而非有序樹其子節點表示法不唯一。 • 多向樹(multiway tree)如果樹的每一節點有固定的子節點數目,而且其排列次也具有特殊意義,則稱為「多向樹」。 *

  9. 4.1 名詞定義 • 定義:「森林(forest)」是指n≧0棵互斥樹的集合。 *

  10. 4.1 名詞定義 • 若節點最多只有二個兒子(children),這個樹狀結構就是二元樹(binary tree)。 *

  11. 4.1 名詞定義 • 定義:「二元樹」(binary tree)是一個有限節點的集合,可能是空的或是包含一樹根或二棵互斥的二元樹,稱為左(left)和右(right)子樹,而左子樹右子數也個是一棵二元樹。 • 二元樹與樹是有所不同的:1.二元樹分成左子樹和右子樹,但一般樹的子樹次序並無關緊要。2.二元樹是准許空樹,但一棵樹則至少有一樹根節點。 *

  12. 4.1 名詞定義 • 圖4-1-4的樹狀結構稱之為歪斜樹(skewed tree),向左歪斜者稱之為「左歪斜樹」,向右歪斜者,則稱之為「右歪斜樹」。 *

  13. 4.1 名詞定義 下面介紹二種特殊的二元樹: • 定義:「全滿二元樹」(full binary tree)是一深度為K的二元樹,其節點樹恰好2k-1個。 • 圖4-1-5是一深度為4的全滿二元樹,其節點樹共15個。 *

  14. 4.1 名詞定義 • 定義:「完整二元樹」(complete binary tree)是一深度K的二元樹,其所有的樹葉均在階度K和K—1,且階度K上的樹葉均在左邊,小於K—1階度的節點均有兩個兒子。

  15. 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)。 *

  16. 4.2 二元樹的基本性質 • 性質四:二元樹的計數(count)n個節點共能組成 種不同的二元樹。 說明:

  17. 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) *

  18. 4.2 二元樹的基本性質 3.解方程式 *

  19. 4.2 二元樹的基本性質 *

  20. 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沒有右兒子。 *

  21. 4.3 二元樹的表示法 • 二元樹的表示法一般有兩種形式: 1.陣列表示法二元樹中的每一個節點由leftchild、rightchild、data三個欄位所構成,而leftchild,rightchild又是一節點,以圖4-1-6為例,表示法如下: *

  22. 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 二元樹的表示法 *

  23. 4.3 二元樹的表示法 2.鏈結表示法 • 二元樹中的任一節點由leftchild,rightchild指標及data三個欄位所構成,即 *

  24. 4.4 樹及森林的追蹤 • 追蹤在於樹狀結構非常基本,在此我們一共考慮三種不同的追蹤方式: 1.前序(preorder) 2.中序(inorder) 3.後序(postorder) • 又被追蹤的結構有二元樹、一般樹及森林。 *

  25. 4.4 樹及森林的追蹤 1.二元樹 • 對二元樹而言,其三種追蹤方式的演算法如下: • (1)前序追蹤若非空二元樹 1.拜訪根節點 2.以前序追蹤左子樹 3.以前序追蹤右子樹 *

  26. 4.4 樹及森林的追蹤 • (2)中序追蹤若非空二元樹 1.以中序追蹤左子樹 2.拜訪根節點 3.以中序追蹤右子樹 • (3)後序追蹤若非空二元樹 1.以後序追蹤左子樹 2.以後序追蹤右子樹 3.拜訪根節點 *

  27. 4.4 樹及森林的追蹤 • 以圖4-4-1的算術為例, *

  28. 4.4 樹及森林的追蹤 • 其追蹤結果如下: 前序:/+-+ab*c+def+g*hi 中序:((a+b)-c*(d+e)+f)/(g+h*i) 後序:ab+cde+*-f+ghi*+/ *

  29. 4.4 樹及森林的追蹤 • 若已知二元樹之前序與中序追蹤,或中序與後序追蹤,則決定唯一二元樹,但若前序與後序追蹤相同,此樹並非唯一,但若假設二元樹如下: • 並設T’:表前序追蹤二元樹TT”:表後序追蹤二元樹T *

  30. T1=ø TR=ø T1≠ø TR=ø T1=ø TR≠ø T1≠ø TR≠ø 前序 R RT1’ RTR’ RTL’TR’ 後序 R TL”R TR”R TL”TR”R 4.4 樹及森林的追蹤 • 則此樹所對應的追蹤結果如下(設ø代表空樹) *

  31. 4.4 樹及森林的追蹤 • 因此若有一樹TL’=TR’且TL”=TR” ,則不同的二元樹會有相同的前序及後序追蹤,如圖4-4-2的二元樹所示: *

  32. 4.4 樹及森林的追蹤 • 若設一二元樹其追蹤結果如下:前序 ABCDEFGHI後序 CBAEDGHFI • 則用遞迴的方式,可決定出此樹,其過程如下: (1)由前序知A為此樹之樹根,由中序則可得左子樹為{B、C},右子樹為{D、E、F、G、H、I},所以可得下圖 *

  33. 4.4 樹及森林的追蹤 (2)以相同的程序處理左子樹及右子樹。如圖4-4-3所示。 *

  34. 4.4 樹及森林的追蹤 2.一般樹與森林的追蹤 • 設有一樹T含有n個節點,若樹根R,其餘節點分成m個子樹T1、T2…Tm,如下所示。 *

  35. 4.4 樹及森林的追蹤 • 則其追蹤法如下: • (1)前序追蹤若非空二元樹 1.拜訪根節點 2.以前序追蹤T1 3.以前序追蹤T2、T3…Tm *

  36. 4.4 樹及森林的追蹤 • (2)中序追蹤若非空二元樹 1.以中序追蹤T1 2.拜訪根節點 3.以中序追蹤T2、T3…Tm • (3)後序追蹤若非空二元樹 1.以後序追蹤T1 2.以後序追蹤T2、T3…Tm 3.拜訪根節點 *

  37. 4.4 樹及森林的追蹤 • 以圖4-4-4為例, 前序 ABCDEFGHI 中序 CDEBGHIFA 後序 EDCIHGFBA *

  38. 4.4 樹及森林的追蹤 • 而森林的追蹤與樹的追蹤法大同小異,以圖4-4-5為例,其追蹤結果如下 前序 ABCDEFGHI 中序 EBCDAGHFI 後序 FDCBHGIFA • 這種追蹤法在遊戲樹(game tree)中常常使用到。 *

  39. 4.5 樹的二元化 • 當一棵樹的任一節點最多k有個兒子,這棵樹則稱為k二元樹(kary tree),然而當我們不論使用陣列或鏈結表示法,每一個紀錄的長度都要能儲存k個子樹的位置,但若在類似稀疏樹的結構下,所浪費的記憶體非常可觀,但在二元樹表示法下,所浪費的記憶空間較少,同時許多性質也較能確定。所以我們常將一般樹轉化成二元樹,以圖4-5-1(a)為例,其轉化步驟如下: *

  40. 4.5 樹的二元化 • 其轉化步驟如下: • (1)將個樹樹根連接起來。 • (2)將個樹利用左端子節點、右邊兄弟各點(left—child—sibling)規則轉化成二元樹。 • 再看看森林的追蹤次序與所對應二元樹追蹤之關係,如圖4-5-1(a),讀者可自行驗證,其中前序追蹤與中序追蹤等兩者次序相同,而後序追蹤則有所區別。 *

  41. 4.5 樹的二元化 *

  42. 4.5 樹的二元化 *

  43. 4.5 樹的二元化 *

More Related