數據結構與算法專題之樹——樹與二叉樹的定義與性質

  本專題的內容是樹,是一種區別於線性表的另一種邏輯的數據結構,它作爲數據結構中最重要的部分之一,我們有必要熟練理解並掌握樹的相關概念及應用。本章作爲本專題第一章節,主要介紹樹的一些定義以及二叉樹的定義和重要性質,二叉樹作爲及其重要的數據結構,內容及其變形應用是相當複雜的,我們計算機專業的有相當一部分人都會在數據結構考試的時候“掛在樹上”,不過不要擔心,從簡單的性質學起,循序漸進地搞定它們。進入主題,樹與二叉樹。

定義

  樹(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)棵互不相交的樹的集合稱爲森林;

二叉樹

  先說一下,二叉樹是樹中最特殊、最強大、最優美的一種,沒有之一。

定義

  二叉樹是每個結點最多有兩個子樹的樹型結構,我們把子樹稱爲“左子樹”和“右子樹”,左子樹和右子樹也各自是一棵二叉樹。需要注意的是,二叉樹的子樹左右有別,次序並不能顛倒。不難看出,二叉樹是遞歸定義的,所以二叉樹的相關題目基本都是通過遞歸來解決,當然也有例外。
  二叉樹在邏輯上有五種基本形態,如圖:

  (a) 空二叉樹,就是啥都沒有
  (b) 只有一個根結點的二叉樹
  (c) 所有結點都只有左子樹
  (d) 所有結點都只有右子樹
  (e) 滿二叉樹(除了最下面一層葉子結點其他結點均有左右子樹)

與樹的區別

  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]



  下集預告&傳送門:數據結構與算法專題之樹——二叉樹的遍歷及應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章