樹:元素之間儲存一對多關係的資料結構,常用於表現族譜關係、組織關係等,也可以借助特殊的樹型結構實現查詢、排序等演算法,一般使用倒懸樹的方式表示。
樹的相關術語:
根結點:樹的最上層元素,有且只能有乙個。
子結點:該結點的對應下一層元素。
父結點:該結點的對應上一層元素。
葉子結點:沒有子結點的元素,一般處於樹的最底層。
兄弟結點:具有同乙個父結點的元素,處在同一層。
高度:指的是樹的層數。
密度:指的是樹的結點數(包括根結點)。
度:指的是結點的子結點數量。
普通樹:
子結點的數量沒有限制。
順序儲存:
1、每個結點一行
下標 資料 父結點下標
0 r -1
1 a 0
2 b 0
3 c 0
4 d 1
5 e 1
6 f 2
7 g 2
8 h 2
9 i 3
10 j 3
11 k 5
12 l 7
2、兄弟結點連續儲存
下標 資料 父結點下標 第乙個子結點下標
0 r -1 1
1 a 0 4
2 b 0 6
3 c 0 9
4 d 1 -1
5 e 1 11
6 f 2 -1
7 g 2 12
8 h 2 -1
9 i 3 -1
10 j 3 -1
11 k 5 -1
12 l 7 -1
3、兄弟結點連續儲存
下標 資料 父結點下標 第乙個子結點 最後乙個子結點
0 r -1 1 3
1 a 0 4 5
2 b 0 6 8
3 c 0 9 10
4 d 1 -1 -1
5 e 1 11 11
6 f 2 -1 -1
7 g 2 12 12
8 h 2 -1 -1
9 i 3 -1 -1
10 j 3 -1 -1
11 k 5 -1 -1
12 l 7 -1 -1
鏈式序儲存:
typedef struct node
node;
二叉樹:子結點的數量多為2。
相關術語:
前序遍歷:根,左,右
中序遍歷:左,根,右
後序遍歷:左,右,根
層序遍歷:從上到下,先左後右
幾種較為常見的樹:
普通二叉樹:對二叉樹的結沒有位置及數量上的要求。
滿二叉樹:樹的每一層的結點數量都 pow(2,層數-1)
完全二叉樹:除了最後一層,其它每一層的結點數量都是 pow(2,層數-1),最後層的結點按照從左往的順序儲存。
有序二叉樹:所有的左子結點都小於根結點,所有右子結點都大於根結點。
平衡二叉樹:首先是有序的二叉樹,樹的左右子樹的高度相差不超過1,並且子樹的子樹都滿足這個要求。
資料結構與演算法之樹(一)
樹是一些節點的集合。這些集合可以是空集,如果不是空集,那麼樹則由稱作根的節點r以及0個或多個非空的樹t1 t2.tk組成。如圖沒有兒子的節點稱為樹葉 具有相同父親的節點稱為兄弟 深度 對於任意的節點n i,從根到n i的唯一路徑的長。高 從ni到一片樹葉的最長路徑的長。遍歷 先序遍歷 若樹為空則返回...
資料結構與演算法之樹簡介
1.示例樹的圖示 2.樹的定義與結構特點 1.樹的定義 由乙個或者多個 n 0 節點組成的有限集合t,有且僅有乙個節點稱為根 root 當n 1的時候,其餘的節點分為m m 0 個互不相交的有限集合t1,t2,tm.每個集合本身又是棵樹,被稱作這顆樹的子樹.由此可以看出樹具有遞迴性,大樹裡面有小樹 ...
資料結構與演算法之2 3 4樹
外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img y3sprlm2 1615947159678 不太平衡的二叉樹 對於乙個普通的二叉查詢樹,我們可以發現乙個問題,存在一定的可能性,一般的二叉查詢樹會退化成一般的鍊錶.上圖還沒有完全退化,但是如果查詢6這個結點,會比其他的葉子結點走更...