樹的相關概念~DS筆記⑥

(Tree):n(n>=0)個結點的有限集。n爲0時稱爲空樹。在任意一棵非空樹中:①:有且僅有一個特定的稱爲(Root)的結點;②:當n>1時,其餘結點可分爲m(m>0)個互不相交的有限集T1、T2、…、Tm,其中每一個集合本身又是一棵樹,並且稱爲根的子樹(SubTree)。

這裏用到了遞歸的方法,也就是用樹的概念去定義樹。這對於樹是很適用的。在後面對於樹的相關功能實現時,還會再用到遞歸的方法。
概念圖如下:
在這裏插入圖片描述
這樣就不難理解爲什麼要叫樹了,這難道不像一個倒置的樹嗎?
在這裏插入圖片描述
需要注意的是,當n>0時,根節點是唯一的。還有,樹的子樹是不能相交的,即,任意一個結點只能有一個前驅,即,概念圖中不能出現“環”。

節點擁有的子樹數稱爲結點的(Degree)。度爲0的結點稱爲葉結點(Leaf)或終端節點;度不爲零的結點稱爲非終端結點或分支結點。除根結點外,分支結點也稱爲內部結點
樹的度是樹內各結點的度的最大值。

結點的子樹的根稱爲該結點的孩子(Child),相應的,該結點稱爲孩子的雙親(Parent)。同一個雙親的孩子之間互稱兄弟(Sibling)。結點的祖先是從根到該結點所經分支上的所有結點。雙親在同一層的結點互爲堂兄弟
結點的層次(Level)從根開始定義起,根爲第一層,根的孩子爲第二層。樹中結點的最大層次稱爲樹的深度(Depth)或高度。
在這裏插入圖片描述
如果將樹中結點的各子樹看成從左至右是有次序的,不能互換的,則稱該樹爲有序樹,否則稱爲無序樹
森林(Forest)是m(m>=0)棵互不相交的樹的集合。

由於樹是一種一對多的結構,所以,無論按何種順序將樹中所有結點存儲到數組中,結點的存儲位置都無法直接反映邏輯關係。所以我們要用特殊的表示方法實現。

  1. 多重鏈表表示法
  2. 雙親表示法
  3. 孩子表示法
  4. 孩子兄弟表示法

多重鏈表表示法
每個結點有多個指針域,每個指針指向一顆子樹的根節點。指針域個數等於樹的度。存在問題:當樹中各結點的度相差很大時,顯然會很浪費空間。當然,也可以再開闢一個關於結點度的指針域,來避免這種浪費。但這仍然會增加額外空間開銷。

雙親表示法
爲每個結點附設一個指向其雙親結點位置的指針。
根據不同的需要,可以在這個基礎上再附加孩子指針和兄弟指針。一般孩子指針優先添加最左孩子,而兄弟指針優先添加右一兄弟。

孩子表示法
把每個結點的孩子結點排列起來,以單鏈表的形式存儲。如果是葉子結點,則此單鏈表爲空。然後,將這n個頭指針組成一個線性表,存入一維數組。存在的問題:不知道結點的雙親。可以和雙親表示法結合以解決這個問題。

孩子兄弟表示法
每個結點都只可能有一個左一孩子,和一個右一兄弟。所以我們設置兩個指針域分別存放它們。其實,這也就將一顆樹變成了二叉樹。存在問題:不知道結點的雙親。可以和雙親表示法結合以解決這個問題。

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