資料結構 樹

2021-10-03 07:19:11 字數 1990 閱讀 3171

樹其實就是不包含迴路的連通無向圖。

樹的特性:

1)一棵樹中的任意兩個結點有且僅有唯一的一條路徑連通;

2)一棵樹如果有nn個結點,則它一定有n−1n−1條邊;

3)在一棵樹中加一條邊將會構成乙個迴路。

樹這種資料結構的用途:

例如:家族的族譜圖、公司的組織結構圖、書的目錄等。

二叉樹是一種特殊的樹。二叉樹的特點是每個結點最多有兩個兒子。

二叉樹用範圍最廣。一顆多叉樹也可以轉化為二叉樹。

1)滿二叉樹:二叉樹中每個內部節點都有兩個兒子。滿二叉樹所有的葉節點都有相同的深度。

滿二叉樹是一棵深度為h且有2h−12h−1個結點的二叉樹。

2)完全二叉樹:若設二叉樹的高度為hh,除了第hh層外,其他層的結點數都達到最大個數,第h層從右向左連續 缺若干個結點,則為完全二叉樹。

特點:由上圖發現:

1)如果一棵完全二叉樹的父節點編號為kk,則其左兒子的編號是2k2k,右兒子的結點編號為2k+12k+1,

公式總結:

2)已知完全二叉樹的總節點數為n求葉子節點個數:

當n為奇數時:(n+1)/2

當n為偶數時 : (n)/2

3)已知完全二叉樹的總節點數為n求父節點個數:為:n/2

4)已知完全二叉樹的總節點數為n求葉子節點為2的父節點個數:

當n為奇數時:n/2

當n為偶數時 : n/2-1

5)如果一棵完全二叉樹有n個結點,那麼這棵二叉樹的深度為【log2(n+1)log2(n+1)】(向上取整)

完全二叉樹最典型的應用就是堆。

堆是一種特殊的完全二叉樹。

1)完全二叉樹——陣列儲存表示(按照層次遍歷的方式,結點編號為 ii 的結點的左子結點編號為 2∗i2∗i , 右子結點編號為 2∗i+12∗i+1. )

2)一般二叉樹(尤其是形態劇烈變化的二叉樹)——鍊錶表示。

3)層次遍歷的二叉樹——佇列。

4)前序遍歷、中序遍歷、後序遍歷——可以用棧來實現。

二叉鍊錶:二叉樹的結點至少包含三個域,分別存放節點的資料data,左結點指標leftchild, 和 右結點指標rightchild.這種鍊錶結構稱為二叉鍊錶。——缺點:難以找到父結點。

三叉鍊錶: 比二叉鍊錶多乙個父指標域parent. 稱為三叉鍊錶。

其中,data域存放某結點的資料資訊;lchild與rchild分別存放指向左孩子和右孩子的指標,當左孩子或右孩子不存在時,相應指標域值為空(用符號∧或null表示)。利用這樣的結點結構表示的二叉樹的鏈式儲存結構被稱為二叉鍊錶。

如下圖2:

三叉鍊錶:

圖2 二叉樹的三叉鍊錶表示示意圖:

儘管在二叉鍊錶中無法由結點直接找到其雙親,但由於二叉鍊錶結構靈活,操作方便,對於一般情況的二叉樹,甚至比順序儲存結構還節省空間。因此,二叉鍊錶是最常用的二叉樹儲存方式。

結構2二叉樹的鏈式儲存

#define datatype char  

//定義二叉樹元素的資料型別為字元

typedef

struct node //定義結點由資料域,左右指標組成

bitree;

資料結構 樹

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

資料結構 樹

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

資料結構 樹

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