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