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...