【資料結構】樹的基本知識
一、概述
- 樹:有限個結點
- 根:唯一的
- 子樹:多個,互不相交
二、結點分類
- 結點:包含一個資料元素及若干個指向其子樹的分支。
- 結點的度(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指標域。
總的來說:
相關文章
- 公共基礎知識-資料結構-樹資料結構
- Vuejs基本知識(一)【專案資料夾基本結構】VueJS
- 七、基本資料結構(樹形結構)資料結構
- 【資料結構】二叉樹的基礎知識資料結構二叉樹
- 資料結構與演算法 二叉樹基本框架與知識點資料結構演算法二叉樹框架
- 資料結構筆記——樹的基本概念資料結構筆記
- 資料結構相關知識資料結構
- 資料結構與演算法知識點總結(5)查詢樹資料結構演算法
- 資料結構-各知識點連結整合資料結構
- MySQL資料庫基本知識MySql資料庫
- 資料結構知識點--儲存結構與邏輯結構資料結構
- 資料結構——樹資料結構
- 資料結構-樹資料結構
- 資料結構知識框架【超詳細】資料結構框架
- 資料結構與演算法知識點總結(3)樹、圖與並查集資料結構演算法並查集
- Python基本資料結構Python資料結構
- 【資料結構】棧的基礎知識(無程式碼)資料結構
- 【資料結構】串的基礎知識(無程式碼)資料結構
- 『資料結構』樹(Tree)資料結構
- 資料結構-字典樹資料結構
- 資料結構之「樹」資料結構
- 資料結構 - 樹,初探資料結構
- 資料結構 - AVL 樹資料結構
- 前端資料結構--樹前端資料結構
- 資料結構的基本概念資料結構
- 【資料結構篇】認識資料結構資料結構
- 樹狀的資料結構的建立資料結構
- 資料結構學習之樹結構資料結構
- 資料結構(樹):二叉樹資料結構二叉樹
- 資料結構----字典及部分知識總結(2018/10/18)資料結構
- 資料庫知識整理 - 概述、資料模型、三級模式結構資料庫模型模式
- Rust中陣列資料結構基礎知識Rust陣列資料結構
- 【資料結構】佇列的基礎知識(無程式碼)資料結構佇列
- c++基本資料結構C++資料結構
- 資料結構之樹( 線段樹,字典樹)資料結構
- 資料結構之「AVL樹」資料結構
- 資料結構-佇列-樹資料結構佇列
- [譯] Golang 資料結構:樹Golang資料結構