神奇少年的數據結構學習筆記五(樹)

1.樹的定義:

樹(Tree)是n(n>=0)個結點的有限集。n=0時稱爲空樹。在n>0時,在任意一顆非空的樹中

  1. 有且僅有一個特定的稱爲根(Root)的結點,它沒有直接前驅,但有零個或多個直接後驅;
  2. 當n>1時,其餘結點可分爲m(m>0)個互不相交的有限集T_{}1,T_{}2.....T_{}M,其中每一個集合本身又是一棵樹,並且稱爲根的子樹(SubTree),每個子樹的根節點有且只有一個直接前驅,但有零個或多個直接後驅;

結點的概念

  1. 結點 :包含一個數據元素及若干指向其他結點的分支。
  2. 結點的度:一個結點的子樹個數。
  3. 分支結點:度不爲0的結點,又稱非終端結點
  4. 終端結點:度爲0都結點,又稱葉結點
  5. 結點的層次:從根開始,根爲第一層,根的子結點爲第二層,以此類推。
  6. 結點之間的關係:結點的子樹的根稱爲該結點的孩子,相應地,該結點稱爲孩子的雙親結點。同一個雙親的孩子之間互稱兄弟結點。結點的祖先是從根到該結點所經分支上的所有結點。對於上圖 H來說 E,B,A都是它的祖先。反之,以某結點爲根的子樹的任一結點都是該結點的子孫。

   樹的概念

  1. 樹的度:樹內所有結點的度的最大值。
  2. 樹的高度:樹中結點層次的最大值爲樹的深度或高度。比如上圖的高度就是4.
  3. 有序樹:將樹中各子樹看成從左到右是有次序的,不能互換的,則稱該樹爲有序樹,否則是無序樹。
  4. 森林:m(m>=0)顆互不相交的樹的集合,對樹中的每個結點而言,其子樹的集合即爲森林。

線性結構和樹結構對比
線性結構 樹結構
第一個數據元素:無前驅 根節點:無雙親,唯一
最後一個數據元素:無後驅 葉結點:無孩子,可以多個
中間元素:一個前驅一個後驅 中間結點:一個雙親多個孩子

 

2.二叉樹的定義:

  1. 每個結點的度都不大於2
  2. 每個結點的孩子結點次序不能任意顛倒

由此得出:二叉樹的每個結點0、1或2個子樹,且有左右之分,左邊的是左子樹,右邊的是右子樹

二叉樹有五種基本形態

  1. 空二叉樹
  2. 只有一個根結點
  3. 根結點只有左子樹
  4. 根結點只有右子樹
  5. 根結點既有左子樹又有右子樹

特殊二叉樹

  1. 斜樹:每層只有一個結點
  2. 滿二叉樹:所有的分支結點都存在左子樹和右子樹,並且所有的葉子都在同一層上
  3. 完全二叉樹:按照滿二叉樹的順序而出現,中間沒有空隙

左斜樹和右斜樹

markmark

滿二叉樹和完全二叉樹

二叉樹的性質

  1. 在二叉樹的第i層上至多有2^{i-1}個結點(i>=1)
  2. 深度爲k的二叉樹至多有2^{k}-1個結點(k>=1)
  3. 對任何一顆二叉樹T,如果其終端結點數爲n_{0},度爲2的結點數爲n_{2},則n_{0}=n_{2}+1
  4. 具有n個結點的完全二叉樹的深度爲(log_{2}n)+1
  5. 對於一顆有n個結點的完全二叉樹 ,對於任意結點有: 1.如果i=1,則i是二叉樹的根,無雙親;如果i>1,則其雙親是結點(i/2); 2.如果2i>n,則結點i無左子樹;否則其左子樹是結點2i;  3.如果2i+1>n。則結點i無左右子樹;否則其右子樹是結點2i+1;

3.二叉樹的存儲結構

1.順序存儲結構

二叉樹之間是有順序的,所有數組的下標足夠提醒二叉樹之間的順序關係,結點爲空的設置一個不存在的值就可以了,但是比如下圖的情況的話,空白的結點都要佔用存儲空間,所以順序存儲結構一般只適用於完全二叉樹。

 

2.二叉樹的鏈式存儲結構

二叉樹的每個結點最多有兩個孩子,所以爲它設計一個數據域和兩個指針域是比較自然的想法,我們稱這樣的鏈表叫做二叉鏈表。(如果有需要,還可以加上指向雙親的指針域,那樣稱爲三叉鏈表)

lchild data rchild

 

data是數據域,lchild和rchild都是指針域,分別存放左子樹和右子樹的指針。   

4.遍歷二叉樹

二叉樹的遍歷是指從根結點出發,按照某種次序依次訪問二叉樹中的所有結點,使得每個結點被訪問且僅被訪問一次。

二叉樹的遍歷方法

  1. 前序遍歷 :若二叉樹爲空,則空操作返回,否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹;例順序爲:ABDGHCEIG             

     

                             
  2. 中序遍歷:若二叉樹爲空,則空操作返回,否則從根結點開始,中序遍歷根結點的左子樹,然後訪問根結點,最後中序遍歷右子樹;例順序爲:GDHBAEICF      
  3. 後序遍歷:若二叉樹爲空,則空操作返回,否則從左到右先葉子後結點的方式遍歷訪問左右子樹,最後訪問根結點;例順序爲:GHDBIEFCA                                           
  4. 層序遍歷:若二叉樹爲空,則空操作返回,否則先訪問根結點,然後從上而下逐層遍歷,同一層按從左到右的順序對結點逐個訪問;例順序爲:ABCDEFGHI 

 

說得再多關看文章或視頻是不能完全理解應用樹的結構的,還是要多刷一下算法題,才能更深一步的理解

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