第五章樹和二叉樹

2021-10-01 05:08:22 字數 1890 閱讀 6235

結點的度:結點所擁有的子樹的個數。

樹的度:樹中各結點度的最大值。

葉子結點:度為0的結點,也稱為終端結點。

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

結點所在層數:根結點的層數為1;對其餘任何結點,若某結點在第k層,則其孩子結點在第k+1層。

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

層序編號:將樹中結點按照從上層到下層、同層從左到右的次序依次給他們編以從1開始的連續自然數。

有序樹、無序樹:如果一棵樹中結點的各子樹從左到右是有次序的,稱這棵樹為有序樹;反之,稱為無序樹。

森林:m (m≥0)棵互不相交的樹的集合。

同構:對兩棵樹,若通過對結點適當地重新命名,就可以使這兩棵樹完全相等(結點對應相等,結點對應關係也相等),則稱這兩棵樹同構。

前序遍歷:若樹為空,不進行遍歷;否則⑴ 訪問根結點;⑵ 按照從左到右的順序前序遍歷根結點的每一棵子樹。

後序遍歷:若樹為空,則遍歷結束;否則⑴ 按照從左到右的順序後序遍歷根結點的每一棵子樹;⑵ 訪問根結點。

層序遍歷:從樹的第一層(即根結點)開始,自上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。

儲存結構的關鍵:如何表示結點的雙親和孩子

基本思想:用一維陣列來儲存樹的各個結點(一般按層序儲存),陣列中的乙個元素對應樹中的乙個結點,每個結點記錄兩類資訊:結點的資料資訊以及該結點的雙親在陣列中的下標。

data:儲存樹中結點的資料資訊

parent:儲存該結點的雙親在陣列中的下標

實現

template

<

class

t>

struct pnode

;

基本思想:鍊錶中的每個結點包括乙個資料域和多個指標域,每個指標域指向該結點的乙個孩子結點。

指標域的個數等於樹的度。

data:資料域,存放該結點的資料資訊;

child1~childd:指標域,指向該結點的孩子。

缺點:浪費空間

指標域的個數等於該結點的度。

data:資料域,存放該結點的資料資訊;

degree:度域,存放該結點的度;

child1~childd:指標域,指向該結點的孩子。

缺點:結點結構不一致

孩子結點:

struct ctnode

;

表頭結點:

template

<

class

t>

struct cbnode

;

因為某結點的第乙個孩子和右兄弟右兄弟是唯一的,可以設定兩個分別指向該結點的第乙個孩子和右兄弟的指標 。

data:資料域,儲存該結點的資料資訊;

firstchild:指標域,指向該結點第乙個孩子;

rightsib:指標域,指向該結點的右兄弟結點。

template

<

class

t>

struct tnode

;

第五章樹和二叉樹

樹的邏輯結構 在樹中常常將資料元素稱為結點。任意一棵非空樹滿足以下條件 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,除根結點之外的其餘節點被分成m m 0 個互不相交的有限集合t1,t2.tm,其中每個集合又是一棵樹,並稱為根節點的子樹。樹的定義是遞迴的。結點的度 某結點所擁有的子樹的個數 ...

第五章 樹和二叉樹

5.1 樹的邏輯結構 樹的定義 n n 0 個結點的有限集合。當n 0時,稱為空樹 任意一棵非空樹滿足以下條件 有且僅有乙個特定的稱為根的結點 當n 1時,除根結點之外的其餘結點被分成m m 0 個互不相交的有限集合t1,t2,tm,其中每個集合又是一棵樹,並稱為這個根結點的子樹。樹的基本術語 結點...

第五章 樹和二叉樹(5 7)

目錄5.7.3哈夫曼編碼 2.哈夫曼編碼演算法實現 3.檔案的編碼和解碼 哈夫曼 huffman 樹又稱最優樹,是一類帶權路徑長度最短的樹,在實際中有廣泛的用途。哈夫曼樹的定義,涉及路徑 路徑長度 權等概念,下面先給出這些概念的定義,然後再介紹哈夫曼樹。路徑 從乙個結點到另乙個結點之間的分支序列 路...