第5章 樹和二叉樹

2021-10-06 22:29:52 字數 3318 閱讀 1899

線性結構的資料元素是一對一的關係。

非線性結構:樹形結構和圖狀結構。

樹形結構是一對多的非線性結構,資料元素之間既有分支關係,又有層次關係。

樹形結構由樹和二叉樹兩種,樹的操作實現比較複雜,但樹可以轉換為二叉樹進行處理。

5.1樹

5.1.1樹的定義

樹(tree)是n個相同型別的資料元素的有限集合。樹中的資料元素叫結點(node)。

記為t,t=(d,r):d是結點的有限集合;r是結點之間關係的有限集合。

除根節點外的所有結點有且只有乙個前驅節點,如果結點之間形成了環(前驅節點有兩個),那麼就不是樹了。

5.1.2樹的相關術語

2、結點的度(degree of node):結點所擁有的子樹的個數。

3、樹的度(degree of tree):樹中各結點度的最大值。

4、葉子結點(leaf node):度不為0的結點,也叫終端結點。

5、分支結點(branch node):度不為零的結點,也叫非終端結點或內部節點。

8、祖先(ancestor):從根到該節點所經分支上的所有結點。

9、結點的層數:就是第幾層。

12、堂兄弟(sibling):同一層的雙親不同的結點。

13、樹的深度(depth of tree):就是有多少層。

14、無序樹(unordered tree):樹中任意乙個結點的各孩子結點之間的次序構成無關緊要的樹。

15、有序樹(ordered tree):樹中任意乙個結點的各孩子結點有嚴格排序次序的樹。二叉樹是有序樹,因為二叉樹中每個孩子結點都確切定義為是該結點的左孩子結點還是右孩子結點。

16、森林(forest):m(m>=0)棵樹的集合。5.2二叉樹

5.2.1二叉樹的定義

二叉樹(binary tree)是n個相同型別的結點的有限集合。(若n>1,則除根結點外,其餘結點被分成了2個互不相交的集合t1、t2,而t1、t2本身又是一棵二叉樹,分別稱為這棵二叉樹的左子樹(left subtree),和右子樹(right subtree),左子樹和右子樹顛倒則成為另一棵不同的二叉樹)。

記為bt,bt=(d,r):d是結點的有限集合;r是結點之間關係的有限集合。

(1)滿二叉樹(full binary tree):一顆二叉樹只有度為0的結點和度為2的結點,並且度為0的結點在同一層上。

對於深度為k的滿二叉樹的結點個數為(2^k)-1。

(2)完全二叉樹(complete binary tree):深度為k,有n個結點的二叉樹當且僅當其每乙個結點都域深度為k,有n個結點的滿二叉樹中編號從1:n的結點意義對應是,稱為完全二叉樹(完全二叉樹是滿二叉樹的子集)。

性質:對於一棵非空二叉樹,度為0的結點數目為n0,度為2的結點數目為n2,則有n0=n2+1。

5.2.5二叉樹的遍歷

遍歷時將二叉樹中的結點資訊由非線性排列變為某種意義上的線性排列(遍歷操作使非線性結構線性化)。

規定d、l、r分別代表遍歷根結點、遍歷左子樹、遍歷右子樹,則二叉樹的遍歷方式有6種:dlr、drl、ldr、lrd、rdl、rld。由於先遍歷左子樹和先遍歷右子樹在演算法設計上沒有本質區別,所以只討論三種方式:dlr(先序遍歷)、ldr(中序遍歷)和lrd(後序遍歷),命名是按照根結點被訪問的次序。

除了上面三種方法,還有層序遍歷(level order):從根結點開始,按照從上到下、從左到右的順序依次訪問每個結點一次僅一次。如下圖:a b c d e f g h i j

1、先序遍歷(dlr)

思想:首先訪問根結點,然後先序遍歷其左子樹,最後先序遍歷其右子樹。如上圖:a b d h i e j c f g

2、中序遍歷(ldr)

思想:首先中序遍歷根結點的左子樹,然後訪問根結點,最後中序遍歷其右子樹。如上圖:h d i b j e a f c g

3、後序遍歷(lrd)

思想:首先後序遍歷根結點的左子樹,然後後序遍歷根結點的右子樹,最後訪問根結點。如上圖:h i d j e b f g c a

5.3樹與森林

5.3.3樹和森林的遍歷

1、樹的遍歷

(1)先序遍歷,即先訪問樹的根結點,然後依次遍歷樹中的每棵子樹。如上圖:a b e f g c h d i j

(2)後序遍歷,即先依次後序遍歷樹中的每棵子樹,然後訪問根結點。如上圖:e f g b h c i j d a

2、森林的遍歷

(1)先序遍歷,即先訪問森林中第一棵樹的根結點,然後先序遍歷第一棵樹中的每棵子樹,最後先序遍歷除第一棵樹之後剩餘的子樹森林。如下圖:a b c d e f g h j i

(2)中序遍歷,即先中序遍歷森林中第一棵樹的根結點的所有子樹,然後訪問第一棵樹的根結點,最後中序遍歷除第一棵樹之後剩餘的子樹森林。如下圖:b c d a f e j h i g

森林的前序遍歷和中序遍歷與所轉換得到的二叉樹的先序遍歷和中序遍歷的結果序列相同。

5.4哈夫曼樹

5.4.1哈夫曼樹的基本概念

(1)路徑(path):從樹中的乙個結點到另乙個結點之間的分支構成這兩個結點間的路徑。

(2)路徑長度(path length):路徑上的分支數。

(3)樹的路徑長度(path length of tree):從樹的根結點到每個結點的路徑長度之和。在結點數目相同的二叉樹中,完全二叉樹的路徑長度最短。

(4)結點的權(weight of node):賦予樹中結點的乙個有實際意義的數。

(5)結點的帶權路徑長度(weight path length of node):從該結點到樹的根結點的路徑長度與該結點的權的乘積。

(6)樹的帶權路徑長度(wpl):樹中所有葉子結點的帶權路徑長度之和。

哈夫曼樹(huffman tree),又叫最優二叉樹,值的是對於一組具有確定權值的葉子結點的具有最小帶權路徑長度的二叉樹。

一棵有n個葉子結點構造的哈夫曼樹共有2*n-1個結點。

5.4.3哈夫曼編碼

規定哈夫曼樹中的左分支代表0,右分支代表1,則從根結點到葉子結點所經過的路徑分支組成0和1的序列便為該結點對應字元的編碼就是哈夫曼編碼(huffman encoding)。

在建立不等長編碼中,必須使任何乙個字元的編碼都不是另乙個編碼的字首,這樣才能保證解碼的唯一性。

第5章 樹和二叉樹

1.樹是一類重要的非線性資料結構,樹形結構是以分支關係來定義的層次結構。在客觀世界中樹形結構廣泛存在,並應用於 人類社會的族譜 家譜 行政區域劃分管理 各種社會組織機構 在計算機領域中,用樹表示源程式的語法結構 在作業系統 os 中,檔案系統 目錄等組織結構也是用樹來表示的。本章的主要內容是 樹的邏...

第5章 樹和二叉樹 1

樹形結構是一對多的非線性結構,非常類似於自然界中的樹,資料元素之間既有分支關係,又有層次關係。樹形結構有樹和二叉樹兩種,樹的操作實現比較複雜,但樹可以轉換為二叉樹進行處理。二叉樹的儲存結構主要有三種 順序儲存結構 二叉鍊錶儲存結構和三叉鍊錶儲存結構。採用順序儲存結構,是對非線性資料結構線性化,用線性...

第5章 樹和二叉樹 9

習題 5.9 編寫演算法,求二叉樹中分支結點的數目。c codes templateclass treenode templateclass tree int countbranchnode private int countbranchnodemethod treenode root int ma...