【資料結構】樹的基本知識

love_Aym發表於2018-05-06

一、概述

  • 樹:有限個結點
  • 根:唯一的
  • 子樹:多個,互不相交




二、結點分類

  • 結點:包含一個資料元素及若干個指向其子樹的分支。
  • 結點的度(Degree):結點擁有的子樹數量。
  • 葉節點(Leaf):度為0的結點
  • 內部結點:除根節點之外,分支結點也稱為內部結點。

    因此——樹的度是樹內各結點的度的最大值。


上面樹的度為3。


三、結點間關係

  • 孩子(Child):結點的子樹的根稱為該結點的孩子。
  • 雙親(Parent):該結點稱為孩子的雙親。(結點是父母同體)
  • 兄弟(Sibling):同一個雙親的孩子之間互稱兄弟。
  • 祖先:是從根到該結點所經分支上的所有結點。
  • 孫子:以某結點為根的子樹中的任一結點都稱為該結點的子孫。



  • 層次(Level):結點的層次從根開始定義起,根為第一層,根的孩子為第二層。雙親在同一層的的結點護互為堂兄弟。
  • 深度(Depth):樹中結點的最大層次,又稱為高度。


  • 如果將樹中結點的各子樹看成從左至右是有次序的,不能互換的,則稱該樹為有序樹,否則稱為無序樹。
  • 森林(Forest):m棵互不相交的樹的集合。(對於同一個樹中的子樹而言)


線性表和樹的結構對比:



四、樹的儲存結構

1、雙親表示法

在每個結點中,附設一個指示器指示其雙親結點在陣列中的位置。


由於根結點沒有雙親,約定在根節點的位置域設定為-1。即所有結點都存有它雙親位置。


  • 優點:

    根據結點的parent指標很容易找到它的雙親結點,時間複雜度O(1),直到parent為-1。

  • 缺點:

    想直到結點的孩子,必須遍歷整個樹結構才行。


2、孩子表示法

多重連結串列表示法:即每個結點有多個指標域,其中每個指標指向一棵子樹的根節點。再專門設定一個位置來儲存結點指標個數。


  • 具體辦法:

        把每個結點的孩子結點排列起來,以單連結串列作儲存結構,則n個結點有n個孩子連結串列,如果是葉子結點則次單連結串列為空。然後n個頭指標又組成一個線性表,採用順序儲存結構,存放進一個一位陣列中。


為了更好的查詢結點的雙親,引入parent,即雙親孩子表示法。





3、孩子兄弟表示法



    為了方便查詢雙親結點,可以設定Parent指標域。



總的來說:


相關文章