樹其實就是不包含迴路的連通無向圖。
樹的特性:
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.這種鍊錶結構稱為二叉鍊錶。——缺點:難以找到父結點。其中,data域存放某結點的資料資訊;lchild與rchild分別存放指向左孩子和右孩子的指標,當左孩子或右孩子不存在時,相應指標域值為空(用符號∧或null表示)。利用這樣的結點結構表示的二叉樹的鏈式儲存結構被稱為二叉鍊錶。三叉鍊錶: 比二叉鍊錶多乙個父指標域parent. 稱為三叉鍊錶。
如下圖2:
三叉鍊錶:
圖2 二叉樹的三叉鍊錶表示示意圖:
儘管在二叉鍊錶中無法由結點直接找到其雙親,但由於二叉鍊錶結構靈活,操作方便,對於一般情況的二叉樹,甚至比順序儲存結構還節省空間。因此,二叉鍊錶是最常用的二叉樹儲存方式。
結構2二叉樹的鏈式儲存
#define datatype char
//定義二叉樹元素的資料型別為字元
typedef
struct node //定義結點由資料域,左右指標組成
bitree;
資料結構 樹
樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...
資料結構 樹
1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...
資料結構 樹
二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...