樹
樹作爲一種數據結構,其結構類似於生活中的樹。以根節點和子級作爲樹節點,通過一組鏈表節點表示。樹也可以這樣定義:樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關係構成的。集合中的元素稱爲樹的結點,所定義的關係稱爲父子關係。父子關係在樹的結點之間建立了一個層次結構。在這種層次結構中有一個結點具有特殊的地位,這個結點稱爲該樹的根結點,或稱爲樹根。使用遍歷,可以訪問樹中的每一個節點。
和數組,棧和隊列不一樣,樹並不是以線性存儲的數據結構。
基本術語
在學習樹數據結構之前,我們需要了解一些與樹相關的術語:
Root(根):樹的第一個節點被稱之爲根節點,每棵樹必須有一個根節點
Parent Node(父節點):任何節點的前置節點都稱之爲父節點,也就是說,從其到任何其它節點都有分支的節點稱之爲父節點
Child Node(子節點):任何節點的後代節點稱之爲子節點,任何父節點可以具有任意數量的子節點,除Root節點外的所有節點都是子節點。
兄弟節點:同屬一個父級的節點稱之爲兄弟節點。
葉節點:在樹數據結構中,沒有子節點的節點稱之爲葉節點,它們也被稱之爲外部節點或者終端節點。
內部節點:至少有一個子節點的節點被稱之爲內部節點。
外部節點:沒有子節點的節點稱之爲外部節點。
Degree(度):一個節點的子節點的總數稱爲該節點的度。
層級(Level):在樹中,從上到下的每一個步驟都被稱之爲層級。
高度(Height):從葉節點到某個特定節點的最長路徑長。
深度(Depth):從根節點到指定節點邊緣總數。
路徑(Path):從根節點到指定節點的邊數。
樹的類型
根據屬性的不同,樹可以分爲以下幾種:
- 普通樹
- 二叉樹
- 二叉搜索樹
- 多叉樹
4.AVL樹(自平衡二叉查找樹)
普通樹
普通樹中的每一個節點可以有一個或者多個子節點。其它類型的樹是普通樹的特例。在數學上,將樹定義爲有限的非空元素集,其中一個元素成爲根元素,其餘元素在劃分樹時稱爲子樹的根。
二叉樹
在普通樹中,每個節點可以偶任意數量的子節點。二叉樹作爲普通樹的一個特例,其中每個節點最多可以有兩個子節點,一個被稱爲左節點,另一個被稱爲右節點。
二叉搜索樹
二叉搜索樹是一種額外滿足二分搜索特性的二叉樹。該樹用於在樹中查找元素時減少比較的次數,例如常規的二分搜索。
在二叉搜索樹中,每個節點的鍵必須大於或者等於其左子樹中的任何節點的鍵,且小於或者等於其右子樹節點的任何節點的鍵。
多叉樹
多叉樹中的每個節點可有具有多個子節點。通常將其稱之爲n叉樹,其中每個節點有M個子節點和m-1個鍵值,每個節點中的鍵值按升序排列,前i個子節點中的鍵值都小於第i個鍵值,後m-1個子節點中的鍵值都大於第i個鍵值。
多叉樹常見的兩種變體
- B-Trees
B樹是一種樹狀數據結構,它能夠存儲數據,對其進行排序並允許以O(log n)的時間複雜度進行查找、順序讀取、插入、刪除的數據結構。B樹,概括來說是一個節點可以擁有多於兩個子節點的二叉排序樹,與自平衡二叉查找樹不同,B樹爲系統最優化大塊數據的讀和寫操作,普遍運用在數據庫和文件系統。B樹中所有節點的最大孩子節點數被稱之爲B樹的階,通常用m來表示。 - B+ Trees
一個B+樹可以看作是一棵B樹,其中每個節點只包含鍵(而不是鍵值對),並且將所有記錄存儲在樹的葉級。
AVL樹(自平衡二叉查找樹)
AVL樹也稱之爲自平衡二叉查找樹.如果樹中每個節點的左子樹和右子樹的高度差爲-1,0或+1,將其稱之爲平衡二叉樹。
樹的常見使用場景
- 文件系統結構 操作系統中文件系統的目錄和子目錄可以通過樹結構來表示
- DOM結構 HTML中的頁面使用DOM結構呈現,該結構包含所有網頁中使用到的標籤,DOM結構也是一個類似於樹的結構
- 路由器算法 使用樹結構構造一個跨越網絡的位置樹,以確保數據包必須遵循路由規則纔能有效的到達目的地。
更多內容,歡迎訪問: