資料結構 樹

2021-07-25 12:36:21 字數 2576 閱讀 6381

樹:

n(n>=0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹中:

(1) 有且僅有乙個特定的稱為根(root)的結點(根節點是唯一的)

(2) 當n>1時,其餘結點可分為m(m>0)個互不相交的有限集t1, t2, …, tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹(subtree)

結點分類:

樹的結點包含乙個資料元素及若干指向其子樹的分支。

結點的度:結點擁有的子樹數。

度為0的結點稱為葉結點或終端結點;度不為0的結點稱為非終端結點或分支結點。

除根結點之外,分支結點也稱為內部結點。

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

結點間關係:

結點的子樹的根稱為該結點的孩子,相應地,該結點稱為孩子的雙親。

同乙個雙親的孩子之間互稱兄弟。

結點的祖先是從根到該結點所經分支上的所有結點。

以某結點為根的子樹中的任一結點都稱為該結點的子孫。

結點的層次從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第i層,則其子樹的根就在第i+1層。雙親在同一層的結點互為堂兄弟。

樹中結點的最大層次稱為樹的深度或高度。

例如:

h的祖先是d,b,a

b的子孫有d,f,g,h

當年樹的深度為4

b和c是堂兄弟,d和e是堂兄弟,f和g和h和i是堂兄弟

森林:

m(m>=0)棵互不相交的樹的集合。

對樹中每個結點而言,其子樹的集合即為森林。

儲存結構的設計是乙個非常靈活的過程。乙個儲存結構設計的是否合理,取決於該儲存結構的運算是否適合,是否方便,時間複雜的好不好等等。

雙親表示法:

以一組連續空間儲存樹的結點,同時在每個結點中,附設乙個指示器指示其雙親結點在陣列中的位置。(每個結點知道自己也知道雙親)

int telemtype; // 樹結點的資料型別

typedef

struct ptnode // 結點結構

ptnode;

typedef

struct

ptree;

注意:沒有雙親結點的parent為-1

孩子表示法:

多重鍊錶表示法:每個結點有多個指標域,其中每個指標指向一棵子樹的根結點

方案一:

指標域的個數等於樹的度(樹各個結點度的最大值)

方案二:

每個結點指標域的個數等於該結點的度,專門取乙個結點儲存結點指標域的個數

孩子表示法的具體:

把每個結點的孩子結點排列起來,以單鏈表作儲存結構,則n個結點有n個孩子鍊錶,如果是葉子結點則此單鏈表為空。然後n個頭指標又組成乙個線性表,採用順序儲存結構,存放進乙個一維陣列中

struct ctnode // 鍊錶結點

*childptr;

typedef

struct

// 線性表結點

ctbox;

typedef

struct

雙親孩子表示法:

孩子兄弟表示法:

設定兩個指標,分別指向該結點的第乙個孩子和此結點的右兄弟

資料結構 樹

樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...

資料結構 樹

1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...

資料結構 樹

二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...