一、樹的邏輯結構
(一)樹的定義
樹是n(n≥0)個結點的有限集合。當n=0時,稱為空樹。
任意一棵非空樹滿足以下條件:
⑴ 有且僅有乙個特定的稱為根的結點;
⑵ 當n>1時,除根結點之外的其餘結點被分成m(m>0)個互不相交的有限集合t1,t2,… ,tm,其中每個集合又是一棵樹,並稱為這個根結點的子樹。
樹的定義是採用遞迴方法
(二)樹的基本術語
結點的度:結點所擁有的子樹的個數。
樹的度:樹中各結點度的最大值。
葉子結點:度為0的結點,也稱為終端結點。
分支結點:度不為0的結點,也稱為非終端結點。
孩子、雙親:樹中某結點子樹的根結點稱為這個結點的孩子結點,這個結點稱為它孩子結點的雙親結點;
兄弟:具有同乙個雙親的孩子結點互稱為兄弟。
路徑:如果樹的結點序列n1, n2, …, nk有如下關係:結點ni是ni+1的雙親(1<=i祖先、子孫:在樹中,如果有一條路徑從結點x到結點y,那麼x就稱為y的祖先,而y稱為x的子孫。
結點所在層數:根結點的層數為1;對其餘任何結點,若某結點在第k層,則其孩子結點在第k+1層。
樹的深度:樹中所有結點的最大層數,也稱高度。
層序編號:將樹中結點按照從上層到下層、同層從左到右的次序依次給他們編以從1開始的連續自然數。
有序樹、無序樹:如果一棵樹中結點的各子樹從左到右是有次序的,稱這棵樹為有序樹;反之,稱為無序樹。
森林:m (m≥0)棵互不相交的樹的集合。
同構:對兩棵樹,若通過對結點適當地重新命名,就可以使這兩棵樹完全相等(結點對應相等,結點對應關係也相等),則稱這兩棵樹同構。
(三)樹的遍歷操作
1.定義:從根結點出發,按照某種次序訪問樹中所有結點,使得每個結點被訪問一次且僅被訪問一次。
2.分類:
(i)前序遍歷
若樹為空,不進行遍歷;否則
⑴ 訪問根結點;
⑵ 按照從左到右的順序前序遍歷根結點的每一棵子樹。
==(ii)後序遍歷 ==
若樹為空,則遍歷結束;否則
⑴ 按照從左到右的順序後序遍歷根結點的每一棵子樹;
⑵ 訪問根結點。
(iii)層序遍歷
從樹的第一層(即根結點)開始,
自上而下逐層遍歷,
在同一層中,按從左到右的順序對結點逐個訪問。
(四)樹的儲存結構
1.雙親表示法
(1)基本思想:用一維陣列來儲存樹的各個結點(一般按層序儲存),陣列中的乙個元素對應樹中的乙個結點,每個結點記錄兩類資訊:結點的資料資訊以及該結點的雙親在陣列中的下標。
data:儲存樹中結點的資料資訊(2)定義:parent:儲存該結點的雙親在陣列中的下標
template struct node ;
2.孩子表示法(多重鍊錶表示法)基本思想:鍊錶中的每個結點包括乙個資料域和多個指標域,每個指標域指向該結點的乙個孩子結點。
p1:指標域的個數等於樹的度
data:資料域,存放該結點的資料資訊;p2:指標域的個數等於該結點的度child1~childd:指標域,指向該結點的孩子。
data:資料域,存放該結點的資料資訊;孩子節點:degree:度域,存放該結點的度;
child1~childd:指標域,指向該結點的孩子。
struct ctnode
;
表頭結點:
template struct cbnode
;
3.孩子兄弟表示法因為某結點的第乙個孩子和右兄弟右兄弟是唯一的,可以設定兩個分別指向該結點的第乙個孩子和右兄弟的指標 。
data:資料域,儲存該結點的資料資訊;定義:firstchild:指標域,指向該結點第乙個孩子;
rightsib:指標域,指向該結點的右兄弟結點。
template struct tnode;
二叉樹 滿二叉樹和完全二叉樹
二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹和完全二叉樹
二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...