20176408李俊 樹和二叉樹
樹
是一類重要的非線性資料結構,樹形結構是以分支關係來定義的層次結構。
樹:n(n≥0)個結點的有限集合。
當n=0時,稱為空樹;任意一棵非空樹滿足以下條件:
⑴ 有且僅有一個特定的稱為根的結點;
⑵當n>1時,除根結點之外的其餘結點被分成m(m>0)個互不相交的有限集合T1,T2,… ,Tm,其中每個集合又是一棵樹,並稱為這個根結點的子樹。
結點的度:結點所擁有的子樹的個數。
樹的度:樹中各結點度的最大值。
葉子結點:度為0的結點,也稱為終端結點。
分支結點:度不為0的結點,也稱為非終端結點。
孩子、雙親:樹中某結點子樹的根結點稱為這個結點的孩子結點,這個結點稱為它孩子結點的雙親結點;
兄弟:具有同一個雙親的孩子結點互稱為兄弟。
祖先、子孫
路徑:如果樹的結點序列n1, n2, …, nk有如下關係:結點ni是ni+1的雙親(1<=i<k),則把n1, n2, …, nk稱為一條由n1至nk的路徑;路徑上經過的邊的個數稱為路徑長度。
結點所在層數:根結點的層數為1;對其餘任何結點,若某結點在第k層,則其孩子結點在第k+1層。
樹的深度:樹中所有結點的最大層數,也稱高度
層序編號:將樹中結點按照從上層到下層、同層從左到右的次序依次給他們編以從1開始的連續自然數。
有序樹、無序樹:如果一棵樹中結點的各子樹從左到右是有次序的,稱這棵樹為有序樹;反之,稱為無序樹。
森林
同構:對兩棵樹,若通過對結點適當地重新命名,就可以使這兩棵樹完全相等(結點對應相等,結點對應關係也相等),則稱這兩棵樹同構。
樹的遍歷:從根結點出發,按照某種次序訪問樹中所有結點,使得每個結點被訪問一次且僅被訪問一次。
抽象操作,可以是對結點進行的各種處理,這裡簡化為輸出結點的資料。
遍歷的實質 樹結構(非線性結構)→線性結構。
樹通常有前序(根)遍歷、後序(根)遍歷和層序(次)遍歷三種方式。
1.樹的前序遍歷操作定義為:
若樹為空,則空操作返回;
否則⑴ 訪問根結點;
⑵ 按照從左到右的順序前序遍歷根結點的每一棵子樹。
2.樹的後序遍歷操作定義為:
若樹為空,則空操作返回;
否則⑴ 按照從左到右的順序後序遍歷根結點的每一棵子樹;
⑵ 訪問根結點。
3.樹的層序遍歷操作定義為:
從樹的第一層(即根結點)開始,自上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。
儲存結構資料元素以及資料元素之間的邏輯關係在儲存器中的表示。
確定連結串列中的結點結構連結串列中的每個結點包括一個數據域和多個指標域,每個指標域指向該結點的一個孩子結點。
設:n個結點度為k的樹,共有nk個鏈域,其中有n-1個指向某個結點,則空鏈域個數:nk-(n-1)=n(k-1)+1
孩子兄弟表示法
1.某結點的第一個孩子是唯一的,某結點的右兄弟是唯一的
2.設定兩個分別指向該結點的第一個孩子和右兄弟的指標
二叉樹
二叉樹是n(n≥0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。
二叉樹的特點:
⑴ 每個結點最多有兩棵子樹;
⑵ 二叉樹是有序的,其次序不能任意顛倒。
斜樹
1 .所有結點都只有左子樹的二叉樹稱為左斜樹;
2 .所有結點都只有右子樹的二叉樹稱為右斜樹;
3.左斜樹和右斜樹統稱為斜樹。
斜樹的特點:
- 在斜樹中,每一層只有一個結點;
2.斜樹的結點個數與其深度相同
滿二叉樹
在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上。
滿二叉樹的特點: - 葉子只能出現在最下一層;
- 只有度為0和度為2的結點。
滿二叉樹在同樣深度的二叉樹中結點個數最多
滿二叉樹在同樣深度的二叉樹中葉子結點個數最多
完全二叉樹
對一棵具有n個結點的二叉樹按層序編號,如果編號為i(1≤i≤n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹
中的位置完全相同。
特殊的二叉樹
在滿二叉樹中,從最後一個結點開始,連續去掉任意個結點,即是一棵完全二叉樹。
完全二叉樹的特點
- 葉子結點只能出現在最下兩層,且最下層的葉子結點都集中在二叉樹的左部;
- 完全二叉樹中如果有度為1的結點,只可能有一個,且該結點只有左孩子。
- 深度為k的完全二叉樹在k-1層上一定是滿二叉樹。
二叉樹的基本性質
1.二叉樹的第i層上最多有2i-1個結點(i≥1)。
2.一棵深度為k的二叉樹中,最多有2k-1個結點,最少有k個結點。(共5點)
二叉樹的遍歷是指從根結點出發,按照某種次序訪問二叉樹中的所有結點,使得每個結點被訪問一次且僅被訪問一次。
二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置(下標)應能體現結點之間的邏輯關係——父子關係。
完全二叉樹和滿二叉樹中結點的序號可以唯一地反映出結點之間的邏輯關係 。
具有n個結點的二叉連結串列中,有n+1個空指標。
三叉連結串列在二叉連結串列的基礎上增加了一個指向雙親的指標域。
線索:將二叉連結串列中的空指標域指向前驅結點和後繼結點的指標被稱為線索;
線索化:使二叉連結串列中結點的空鏈域存放其前驅或後繼資訊的過程稱為線索化;
線索二叉樹:加上線索的二叉樹稱為線索二叉樹。
樹的前序遍歷等價於 樹的前序遍歷等價於二叉樹的前序遍歷!
樹的後序遍歷等價於 樹的後序遍歷等價於二叉樹的中序遍歷! 二叉樹的中序遍歷!
森林的遍歷
遍歷方法:
⑴前序(根)遍歷:前序遍歷森林即為前序遍歷森林中的每一棵樹。
⑵後序(根)遍歷:後序遍歷森林即為後序遍歷森林中的每一棵樹。