樹(Trees)


樹作爲一種數據結構,其結構類似於生活中的樹。以根節點和子級作爲樹節點,通過一組鏈表節點表示。樹也可以這樣定義:樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關係構成的。集合中的元素稱爲樹的結點,所定義的關係稱爲父子關係。父子關係在樹的結點之間建立了一個層次結構。在這種層次結構中有一個結點具有特殊的地位,這個結點稱爲該樹的根結點,或稱爲樹根。使用遍歷,可以訪問樹中的每一個節點。

和數組,棧和隊列不一樣,樹並不是以線性存儲的數據結構。

基本術語


在學習樹數據結構之前,我們需要了解一些與樹相關的術語:

Root(根):樹的第一個節點被稱之爲根節點,每棵樹必須有一個根節點

Parent Node(父節點):任何節點的前置節點都稱之爲父節點,也就是說,從其到任何其它節點都有分支的節點稱之爲父節點

Child Node(子節點):任何節點的後代節點稱之爲子節點,任何父節點可以具有任意數量的子節點,除Root節點外的所有節點都是子節點。

兄弟節點:同屬一個父級的節點稱之爲兄弟節點。

葉節點:在樹數據結構中,沒有子節點的節點稱之爲葉節點,它們也被稱之爲外部節點或者終端節點。

內部節點:至少有一個子節點的節點被稱之爲內部節點。

外部節點:沒有子節點的節點稱之爲外部節點。

Degree(度):一個節點的子節點的總數稱爲該節點的度。

層級(Level):在樹中,從上到下的每一個步驟都被稱之爲層級。

高度(Height):從葉節點到某個特定節點的最長路徑長。

深度(Depth):從根節點到指定節點邊緣總數。

路徑(Path):從根節點到指定節點的邊數。

樹的類型


根據屬性的不同,樹可以分爲以下幾種:

  1. 普通樹
  2. 二叉樹
  3. 二叉搜索樹
  4. 多叉樹
    4.AVL樹(自平衡二叉查找樹)

普通樹


普通樹中的每一個節點可以有一個或者多個子節點。其它類型的樹是普通樹的特例。在數學上,將樹定義爲有限的非空元素集,其中一個元素成爲根元素,其餘元素在劃分樹時稱爲子樹的根。

二叉樹


在普通樹中,每個節點可以偶任意數量的子節點。二叉樹作爲普通樹的一個特例,其中每個節點最多可以有兩個子節點,一個被稱爲左節點,另一個被稱爲右節點。

二叉搜索樹


二叉搜索樹是一種額外滿足二分搜索特性的二叉樹。該樹用於在樹中查找元素時減少比較的次數,例如常規的二分搜索。

在二叉搜索樹中,每個節點的鍵必須大於或者等於其左子樹中的任何節點的鍵,且小於或者等於其右子樹節點的任何節點的鍵。

多叉樹


多叉樹中的每個節點可有具有多個子節點。通常將其稱之爲n叉樹,其中每個節點有M個子節點和m-1個鍵值,每個節點中的鍵值按升序排列,前i個子節點中的鍵值都小於第i個鍵值,後m-1個子節點中的鍵值都大於第i個鍵值。

多叉樹常見的兩種變體

  1. B-Trees
    B樹是一種樹狀數據結構,它能夠存儲數據,對其進行排序並允許以O(log n)的時間複雜度進行查找、順序讀取、插入、刪除的數據結構。B樹,概括來說是一個節點可以擁有多於兩個子節點的二叉排序樹,與自平衡二叉查找樹不同,B樹爲系統最優化大塊數據的讀和寫操作,普遍運用在數據庫和文件系統。B樹中所有節點的最大孩子節點數被稱之爲B樹的階,通常用m來表示。
  2. B+ Trees
    一個B+樹可以看作是一棵B樹,其中每個節點只包含鍵(而不是鍵值對),並且將所有記錄存儲在樹的葉級。

AVL樹(自平衡二叉查找樹)


AVL樹也稱之爲自平衡二叉查找樹.如果樹中每個節點的左子樹和右子樹的高度差爲-1,0或+1,將其稱之爲平衡二叉樹。

樹的常見使用場景


  • 文件系統結構 操作系統中文件系統的目錄和子目錄可以通過樹結構來表示
  • DOM結構 HTML中的頁面使用DOM結構呈現,該結構包含所有網頁中使用到的標籤,DOM結構也是一個類似於樹的結構
  • 路由器算法 使用樹結構構造一個跨越網絡的位置樹,以確保數據包必須遵循路由規則纔能有效的到達目的地。

更多內容,歡迎訪問:


在這裏插入圖片描述

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