結點的度:結點所擁有的子樹的個數。
樹的度:樹中各結點度的最大值。
葉子結點:度為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 樹又稱最優樹,是一類帶權路徑長度最短的樹,在實際中有廣泛的用途。哈夫曼樹的定義,涉及路徑 路徑長度 權等概念,下面先給出這些概念的定義,然後再介紹哈夫曼樹。路徑 從乙個結點到另乙個結點之間的分支序列 路...