第5章 樹和二叉樹

2021-09-02 02:34:14 字數 3224 閱讀 9748

1.樹是一類重要的非線性資料結構,樹形結構是以分支關係來定義的層次結構。在客觀世界中樹形結構廣泛存在,並應用於:

•人類社會的族譜、家譜、行政區域劃分管理;

•各種社會組織機構;

•在計算機領域中,用樹表示源程式的語法結構;

•在作業系統(os)中,檔案系統、目錄等組織結構也是用樹來表示的。

本章的主要內容是

?樹的邏輯結構

?樹的儲存結構

?二叉樹的邏輯結構

?二叉樹的儲存結構及實現

?樹、森林與二叉樹的轉換?哈夫曼樹

5.1 樹的邏輯結構

1.樹的定義

樹:n(n≥0)個結點的有限集合。當n=0時,稱為空樹;任意一棵非空樹滿足以下條件:

⑴有且僅有乙個特定的稱為根的結點;

⑵當n>1時,除根結點之外的其餘結點被分成m(m>0)個互不相交的有限集合t1,t2,…,tm,其中每個集合又是一棵樹,並稱為這個根結點的子樹。

樹的定義是採用遞迴方法

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

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

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

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

孩子、雙親:樹中某結點子樹的根結點稱為這個結點的孩子結點,這個結點稱為它孩子結點的雙親結點;

兄弟:具有同乙個雙親的孩子結點互稱為兄弟。

路徑:如果樹的結點序列n1, n2, …, nk有如下關係:結點ni是ni+1的雙親(1<=i後序遍歷

樹的後序遍歷操作定義為:

若樹為空,則空操作返回;否則

⑴按照從左到右的順序後序遍歷根結點的每一棵子樹;

⑵訪問根結點。

層序遍歷

樹的層序遍歷操作定義為:

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

5.2 樹的儲存結構

1.雙親表示法

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

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

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

template

structpnode

2.孩子表示法——多重鍊錶表示法

3.雙親孩子表示法

4.孩子兄弟表示法

template

structtnode

5.3 二叉樹的邏輯結構

1.二叉樹的定義

二叉樹是n(n≥0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由乙個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。

2.二叉樹的特點:

⑴每個結點最多有兩棵子樹;

⑵二叉樹是有序的,其次序不能任意顛倒。

3.斜樹

(1) .所有結點都只有左子樹的二叉樹稱為左斜樹;

(2).所有結點都只有右子樹的二叉樹稱為右斜樹;

(3).左斜樹和右斜樹統稱為斜樹。

特點:1. 在斜樹中,每一層只有乙個結點;2.斜樹的結點個數與其深度相同。

4.滿二叉樹

在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上。

特點:1.葉子只能出現在最下一層;2.只有度為0和度為2的結點。

滿二叉樹在同樣深度的二叉樹中結點個數最多

滿二叉樹在同樣深度的二叉樹中葉子結點個數最多

5.完全二叉樹

對一棵具有n個結點的二叉樹按層序編號,如果編號為i(1≤i≤n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中的位置完全相同。

特點:(1). 葉子結點只能出現在最下兩層,且最下層的葉子結點都集中在二叉樹的左部;

(2). 完全二叉樹中如果有度為1的結點,只可能有乙個,且該結點只有左孩子。

(3). 深度為k的完全二叉樹在k-1層上一定是滿二叉樹。

6.二叉樹的基本性質

性質5-1 二叉樹的第i層上最多有2i-1個結點(i≥1)

性質5-2 一棵深度為k的二叉樹中,最多有2k-1個結點,最少有k個結點。

性質5-3 在一棵二叉樹中,如果葉子結點數為n0,度為2的結點數為n2,則有: n0=n2+1。

性質5-4 具有n個結點的完全二叉樹的深度為log2n +1。

7.二叉樹的遍歷操作

前序(根)遍歷

若二叉樹為空,則空操作返回;否則:①訪問根結點;②前序遍歷根結點的左子樹;③前序遍歷根結點的右子樹。

中序(根)遍歷

若二叉樹為空,則空操作返回;否則:①中序遍歷根結點的左子樹;②訪問根結點;③中序遍歷根結點的右子樹。

後序(根)遍歷

若二叉樹為空,則空操作返回;否則:①後序遍歷根結點的左子樹;②後序遍歷根結點的右子樹。③訪問根結點;

層序遍歷

二叉樹的層次遍歷是指從二叉樹的第一層(即根結點)開始,從上至下逐層遍歷,在同一層中,則按從左到右的順序對結點逐個訪問。

8.順序儲存結構

二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置(下標)應能體現結點之間的邏輯關係——父子關係。

9.前序遍歷——遞迴演算法

template

void bitree::preorder(binode *root)

}中序遍歷——遞迴演算法

template

void bitree::inorder(binode *root)

}後序遍歷——遞迴演算法

template

void bitree::postorder(binode *root)

template

void bitree::creat(binode *root)

}二叉樹的銷毀遞迴演算法

template

void bitree::release(binode* root)

}計算法求二叉樹的結點個數

intn=0;

template

void count(binode *root) //n為全域性量並已初始化為0

}計算法按前序次序列印二叉樹中的葉子結點

template

void preorderleaf(binode *root)

}計算法求二叉樹的深度

template

intdepth(binode *root)

}

第5章 樹和二叉樹

線性結構的資料元素是一對一的關係。非線性結構 樹形結構和圖狀結構。樹形結構是一對多的非線性結構,資料元素之間既有分支關係,又有層次關係。樹形結構由樹和二叉樹兩種,樹的操作實現比較複雜,但樹可以轉換為二叉樹進行處理。5.1樹 5.1.1樹的定義 樹 tree 是n個相同型別的資料元素的有限集合。樹中的...

第5章 樹和二叉樹 1

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

第5章 樹和二叉樹 9

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