值得了解的九種樹形資料結構 - Franco

banq發表於2021-12-12

Franco總結了九種常見的樹形資料結構 :
  • binary search tree
  • red-black tree
  • generic tree
  • binary tree
  • splay tree
  • AVL tree
  • B-tree
  • Treap
  • Trie

 

通用樹
表示不同節點之間關係的分層資料結構。它可以不包含節點或 1 個具有 0 個或多個子樹的特殊節點(根)。每個節點只有 1 個父節點,但可以有多個子節點。
用途:

  • 層次結構沒有限制。
  • 通常可儲存任何分層資料(即資料夾結構)

 

二叉樹
描述樹資料結構,其中一個節點最多可以有 2 個子節點。節點的孩子被稱為左孩子和右孩子。
用途:

  • 由編譯器用於構建語法樹 
  • 用於實現表示式解析和評估 
  • 用於在網路中儲存路由錶連結路由器
  • 用於資料壓縮編碼演算法

  

二叉搜尋樹
具有唯一屬性的二叉樹的受限擴充套件。給定一個節點,其左子節點的值小於或等於父節點的值。其右孩子的值大於或等於父值。
用途:

  • 用於實現簡單的排序演算法
  • 用於維護已排序的資料流
  • 用於實現雙端優先順序佇列
  • 用於資料不斷進入和離開的搜尋應用程式

 

AVL 樹
描述一種自平衡二叉搜尋樹。每個節點都關聯了一個值,表示其左右子樹之間的高度差。操作後,如果這些差值大於 1,則執行旋轉以平衡樹。
用途:

  • - 用於需要在樹中頻繁插入的每種情況
  • - 在 Linux 核心的記憶體管理子系統中用於在搶佔期間搜尋程式的記憶體區域

  

紅黑樹 
描述自平衡二叉搜尋樹。每個節點要麼是紅色,要麼是黑色。根和葉是黑色的。如果一個節點是紅色的,它的兩個孩子都是黑色的。從給定節點到任何葉子的每條路徑都必須具有相同數量的黑色節點。
用途:

  • - 用於計算幾何以降低演算法的時間複雜度
  • - 用於在 Linux 中實現 CPU 程式排程程式
  • - 用於關聯資料結構的各種實現(即 C++ 對映、集合、Java HashMap)

  

展開splay樹 
描述一種自平衡二叉搜尋樹。最近訪問的節點可以快速再次訪問。在插入或搜尋之後,稱為 splaying 的操作重新排列樹(使用旋轉),以便將涉及的元素作為根放置。
用途:

  • - 用於實現快取
  • - 用於垃圾收集器
  • - 用於資料壓縮

  

Treap
描述混合堆和樹的二叉搜尋樹。每個節點都有一個鍵和一個優先順序。鍵遵循二叉搜尋樹屬性。優先順序(通常是隨機值)遵循堆屬性。
用途:

  • - 用於維護基於非對稱加密的應用程式中的授權證照
  • - 用於執行快速設定操作(即聯合、相交)

 

B 樹
描述包含多個節點的自平衡搜尋樹,這些節點按排序順序儲存資料。每個節點有 n 個鍵(按升序儲存)和 n+1 個子節點。鍵分離了儲存在每個子樹中的鍵的範圍
用途:

  • - 用於資料庫索引以加快搜尋
  • - 用於檔案系統以實現目錄

  

Trie
描述 一種樹資料結構,其節點儲存字母表中的字母。從根到葉的每條路徑構成一個詞。一個節點的所有後代共享一個與該節點關聯的公共字首。
用途:

  • - 用於自動完成文字系統
  • - 用於實現拼寫檢查
  • - 用於解決文字遊戲




 

相關文章