1. 程式人生 > 其它 >資料結構與演算法 10.樹

資料結構與演算法 10.樹

樹的基本概念
    每個節點有0個或多個子節點
    沒有父節點的節點稱為根節點
    每一個非根節點有且只有一個父節點
    除根節點外,每個子節點可以分為多個不相交的子樹
    一棵樹可以沒有任何節點,稱為空樹,可以只有1個節點,即根節點

    節點、根節點、子節點、父節點、兄弟節點

    子樹、左子樹、右子樹

    節點的度(degree):子樹的個數
    樹的度:所有節點度中的最大值
    葉子節點(leaf):度為0的節點

    層數(level):根節點在第1層,根節點的子節點在第2層,以此類推

    節點的深度(depth):從根節點到當前節點的唯一路徑上的節點總數
    節點的高度(height):從當前節點到最遠葉子節點的路徑上的節點總數

    樹的深度:所有節點深度中的最大值
    樹的高度:所有節點高度中的最大值
    樹的深度等於樹的高度

    有序樹:樹中任意節點的子節點之間有順序關係
    無序樹:樹中任意節點的子節點之間沒有順序關係,也叫自由樹
    森林:由m(m>=0)棵互不相交的樹組成的集合

樹的種類
    二叉樹:每個節點最多含有兩個子樹的樹
    完全二叉樹:對於一棵二叉樹,設其深度為d(d>1),除了第d層,其他各層的節點數均已達最大值,且d層所有節點從左向右緊密排列
    滿二叉樹:所有葉節點都在最底層的完全二叉樹
    平衡二叉樹(AVL樹):任何節點的兩棵子樹的高度差不大於1的二叉樹
    排序二叉樹(binary search tree):也叫二叉查詢樹
    霍夫曼樹:帶權路徑最短的二叉樹,也叫最優二叉樹,用於資訊編碼
    B樹:一種對讀寫操作進行優化的自平衡的二叉查詢樹,能夠保持資料有序,擁有多於兩個子樹

常見應用場景:
    xml、html等,編寫解析器時
    路由協議
    mysql資料庫索引
    檔案系統的目錄結構
    很多AI演算法都是樹搜尋,此外機器學習中的decision tree也是樹結構