樹和樹的表示

2021-08-04 12:38:46 字數 1969 閱讀 7206

part1 樹

在現實生活中,有很多具有層次的關係。層次管理具有很高的效率。在計算機中也是一樣,就實現了計算機中的層次,在查詢修改資訊方面提供了很大的方便。

之前在學習離散數學時已經對樹有了了解,所以這裡理解起來很容易。

樹的定義:n(n≥0)個結點構成的有限集合。

當n=0時,稱為空樹。

對於任意一棵非空樹,他都具有以下性質:

1.樹中有乙個特殊結點叫做根(root),可用r表示。

2.其餘結點可分為m(m>0)個互不相交的有限集t1,t2,…,tm,其中每個集合本身又是一棵樹,稱為原來樹的「子樹(sub tree)」

**

樹與非樹

樹的一些基本術語

1.結點的度(degree):結點的子樹個數。

2.樹的度:樹的所有結點中最大的度數

3.葉結點(leaf):度為0的結點。

4.父結點(parent):有子樹的結點是其子樹的根結點的父結點。

5.子結點(child):若a結點是b結點的父結點,則稱b結點是a結點的子結點;子結點也稱孩子結點。

6.兄弟結點(sibling):具有同一父結點的各結點彼此是兄弟結點。

7.路徑和路徑長度:從結點n1到nk的路徑為乙個結點序列n1,n2,…,nk是ni+1的父結點。路徑所包含邊的個數為路徑的長度。

8.祖先結點(ancestor):沿樹根到某一結點路徑上所有結點都是這個結點的祖先結點。

9.子孫結點(descendant):某一結點的子樹中的所有結點是這個結點的子孫。

10.結點的層次(level):規定根結點在1層,其他任一結點的層數是其父結點的層數加1.

11.樹的深度(depth):樹中所有結點中最大層次是這棵樹的深度。

part2 樹的表示

1.陣列實現

用陣列實現樹可謂乙個龐大的工程,陣列是一組連續的儲存空間,對父親兄弟兒子的區分很難,不容易表現出樹的層次。所以考慮用鍊錶實現。

2.鍊錶實現

方法一

但是用這種方法難免造成空間的浪費,因為我們必須根據結點的最大度來定義結構體,但是實際上又用不到那麼多的空間。

方法二-兄弟兒子表示法

優點 1.結構統一

2.空間浪費小

這裡需要引出乙個新的概念

二叉樹:乙個有窮的結合點集合。

這個集合可以為空

若不為空,則它是由根節點和稱為其左子樹和右子樹兩個不香蕉的二叉樹組成。

一般的樹我們都可以用兒子兄弟的方法將其表示成二叉樹的形式。

所以搞清楚二叉樹尤為的重要。

樹的定義和表示

樹 n個結點構成的有限集合。當n 0時,稱為空樹 結點的度 結點的子樹個數 樹的度 樹的所有結點中最大的度數 葉結點 度為0的結點 兄弟結點 具有同一父結點的各結點彼此是兄弟結點。路徑和路徑長度 從結點n1到nk的路徑為乙個結點序列n1,n2,nk,ni是ni 1的父結點。路徑所包含邊的個數為路徑的...

4 樹 樹的表示

根據某個給定關鍵字k,從集合r中找出關鍵字與k相同的記錄 int sequentialsearch statictable tbl,elementtype k return 1 順序查詢演算法的時間複雜度為o n 假設n個資料元素的關鍵字滿足有序 比如 小到大 k 1 le k 2 le le k ...

樹的表示方法

順序儲存 查指定結點的雙親方便,指定結點的孩子則需要從頭遍歷 根節點固定儲存在0,且 1表示沒有雙親 define max tree size 100 typedef struct ptnode typedef struct ptree 順序 鏈式儲存 struct ctnode typedef s...