本專題的內容是樹,是一種區別於線性表的另一種邏輯的數據結構,它作爲數據結構中最重要的部分之一,我們有必要熟練理解並掌握樹的相關概念及應用。本章作爲本專題第一章節,主要介紹樹的一些定義以及二叉樹的定義和重要性質,二叉樹作爲及其重要的數據結構,內容及其變形應用是相當複雜的,我們計算機專業的有相當一部分人都會在數據結構考試的時候“掛在樹上”,不過不要擔心,從簡單的性質學起,循序漸進地搞定它們。進入主題,樹與二叉樹。
樹
定義
樹(tree)是包含n(n>0)個結點的有窮集,其中:(1)每個元素稱爲結點(node);
(2)有一個特定的結點被稱爲根結點或樹根(root)。
(3)除根結點之外的其餘數據元素被分爲m(m≥0)個互不相交的集合T1,T2,……Tm-1,其中每一個集合Ti(1<=i<=m)本身也是一棵樹,被稱作原樹的子樹(subtree)。
樹也可以這樣定義:樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關係構成的。集合中的元素稱爲樹的結點,所定義的關係稱爲父子關係。父子關係在樹的結點之間建立了一個層次結構。在這種層次結構中有一個結點具有特殊的地位,這個結點稱爲該樹的根結點,或稱爲樹根。
我們可以形式地給出樹的遞歸定義如下:
單個結點是一棵樹,樹根就是該結點本身。
設T1,T2,..,Tk是樹,它們的根結點分別爲n1,n2,..,nk。用一個新結點n作爲n1,n2,..,nk的父親,則得到一棵新樹,結點n就是新樹的根。我們稱n1,n2,..,nk爲一組兄弟結點,它們都是結點n的子結點。我們還稱T1,T2,..,Tk爲結點n的子樹。
空集合也是樹,稱爲空樹。空樹中沒有結點。
如上圖所示,黑色的是樹形結構,粉色框起來的部分是整棵樹,箭頭所指是整棵樹根結點,它的每一個子節點都可以作爲它子樹的根,如圖,藍色和橙色是粉色的子樹,綠色是藍色的子樹。
相關術語
結點的度:一個結點含有的子結點的個數稱爲該結點的度;
葉結點或終端結點:度爲0的結點稱爲葉結點;
非終端結點或分支結點:度不爲0的結點;
雙親結點或父結點:若一個結點含有子結點,則這個結點稱爲其子結點的父結點;
孩子結點或子結點:一個結點含有的子樹的根結點稱爲該結點的子結點;
兄弟結點:具有相同父節點的結點互稱爲兄弟結點;
樹的度:一棵樹中,最大的結點的度稱爲樹的度;
節點的層次:從根開始定義起,根爲第1層,根的子節點爲第2層,以此類推;
樹的高度或深度:樹中結點的最大層次;
堂兄弟結點:雙親在同一層的結點互爲堂兄弟;
節點的祖先:從根到該結點所經分支上的所有結點
子孫:以某結點爲根的子樹中任一結點都稱爲該結點的子孫。
森林:由m(m>=0)棵互不相交的樹的集合稱爲森林;
二叉樹
定義
與樹的區別
1. 樹對於結點的度沒有限制,而二叉樹每個結點的度最大爲2。
2. 樹的結點可以無序,但二叉樹結點有左右之分。
完全二叉樹
我們不難發現,對於二叉樹來說,每一層都有最大結點數量,比如第2層最多2個結點,第3層最多4個,第4層最多8個,第i層最多2i-1個。
完全二叉樹的定義,就是假設樹的高度爲h,則除了第h層以外,每一層都達到了最大結點數,並且第h層的結點都是從左到右依次排列的,如圖所示,除了(a),其他都不是完全二叉樹:
滿二叉樹
滿二叉樹是完全二叉樹的特殊情況,顧名思義就是對於高度爲h的二叉樹,每一層都“滿了”,都達到了最大結點數量,如下圖就是一棵滿二叉樹,當然,它也是完全二叉樹:
二叉樹的基本性質
1. 在非空二叉樹中,第i層的結點總數不超過2i-1 ,i>=1;
2. 深度爲h的二叉樹最多有2h-1個結點(h>=1),最少有h個結點;
3. 對於任意一棵二叉樹,如果其葉結點數爲N0,而度數爲2的結點總數爲N2,則N0=N2+1;
4. 具有n個結點的完全二叉樹的深度爲log2(n+1)
5. 有N個結點的完全二叉樹各結點如果用順序方式存儲,則結點之間有如下關係:
若I爲結點編號則 如果I>1,則其父結點的編號爲I/2;
(1) 如果2*I<=N,則其左兒子(即左子樹的根結點)的編號爲2*I;若2*I>N,則無左兒子;
(2) 如果2*I+1<=N,則其右兒子的結點編號爲2*I+1;若2*I+1>N,則無右兒子。
6. 給定N個節點,能構成h(N)種不同的二叉樹。h(N)爲卡特蘭數的第N項。h(n)=C(2*n,n)/(n+1)。
7. 設有i個枝點,I爲所有枝點的道路長度總和,J爲葉的道路長度總和J=I+2i[4]
下集預告&傳送門:數據結構與算法專題之樹——二叉樹的遍歷及應用