1. 程式人生 > >樹-概念性總結及代碼示例

樹-概念性總結及代碼示例

取出 次數 術語 結構 無法 浪費 滿二叉樹 否則 實現

總覽:

  • 樹的基本概念
  • 二叉樹
  • 樹和森林
  • 樹與二叉樹的應用

  1. 樹的基本概念
    1. 樹的定義:若幹結點的集合,有唯一根結點,無環,結點個數可為0
    2. 樹的基本術語:
      1. 結點的度:結點擁有的子樹個數或者分支的個數
      2. 樹的度:結點的度的最大值
      3. 葉子結點:終端結點
      4. 非終端結點:分支結點
      5. 樹的深度:樹中結點的最大層次數
      6. 結點的深度:從根結點到該結點路徑上結點的個數
      7. 結點的高度:子樹的深度
      8. 有序樹與無序樹
      9. 豐滿樹:理想平衡樹,除最底層外其他都是滿的
      10. 森林
    3. 樹的存儲結構
      1. 順序存儲結構
      2. 鏈式存儲結構
        1. 孩子存儲結構
        2. 孩子兄弟存儲結構
  2. 二叉樹
    1. 二叉樹的定義
      1. 滿二叉樹:所有分支結點都有左兒子和右兒子,並且葉子結點都集中在最下一層
      2. 完全二叉樹:除最後一層是滿二叉樹
    2. 二叉樹的主要性質(教材P123)
      1. 在二叉樹的第i層上之多有2^(i-1)個結點
      2. 深度為k的二叉樹至多有(2^k)– 1個結點
      3. 對任何一顆二叉樹T,如果其終端結點數為N0,度為2的結點數為N2,則N0 = N2 + 1
      4. 具有n個結點的完全二叉樹的深度為[log2n] + 1 (向下取整)
      5. 如果一顆有n個結點的完全二叉樹的結點按層序編號,則對任一結點i(1 <= I <= n),有
        1. 如果i=1,則結點i是二叉樹的根,無雙親;如果i>1,則其雙親PARENT(i)是結點[i/2](向下取整)
        2. 如果2i > n,則結點i無左孩子(結點i為葉子結點);否則其左孩子LCHILD(i)是結點2i
        3. 如果2i + 1 > n,則結點i無右孩子;否則其右孩子RCHILD(i)是結點2i + 1
    3. 二叉樹的存儲結構
      1. 順序存儲結構:僅適用於完全二叉樹,對於一般的二叉樹會浪費大量存儲空間
      2. 鏈式存儲結構:最簡單的存儲結構 (左孩子,數據域,右孩子)
    4. 二叉樹的遍歷算法
      1. 先序遍歷
      2. 中序遍歷
      3. 後序遍歷
    5. 二叉樹遍歷算法的改進
      1. 非遞歸實現:通過棧模擬遞歸的實現
      2. 線索二叉樹:利用樹中的空指針域記錄結點的前驅
  3. 樹和森林與二叉樹的相互轉換
    1. à 二叉樹:右兄弟變右兒子
    2. 二叉樹 à 樹:右兒子變右兄弟
    3. 森林 à 二叉樹:每棵樹先轉化為二叉樹,然後從後往前將該樹變為前一棵樹的右兒子,直到變成一棵二叉樹
    4. 二叉樹 à
      森林:砍右兒子,變成樹
    5. 樹和森林的遍歷
      1. 先序遍歷
      2. 後序遍歷
  4. 樹與二叉樹的應用
    1. 二叉排序樹與二叉平衡樹
    2. 哈夫曼樹和哈夫曼編碼
      1. 相關概念:
        1. 路徑:指從樹的一個結點到另一個結點的分支所構成的路徑。
        2. 路徑長度:指路徑上的分支數目。
        3. 樹的路徑長度:指從根到每個結點的路徑長度之和。
        4. 帶權路徑長度:結點具有權值,從該結點到根之間的路徑長度乘結點的權值,就是該結點的帶權路徑長度
        5. 樹的帶權路徑長度(WPL):樹中所有葉子結點的帶權路徑長度之和
      2. 構造方法:
        1. 將這n個權值跟別看成只有根節點的n棵二叉樹,這些二叉樹構成的集合記為F。
        2. 從集合F中取出權值最小的兩個結點a,b構成一顆新的二叉樹c,新二叉樹的根節點的權值為其子結點的權值之和。
        3. 刪去a,b,加入新構造的樹c
        4. 重復2,3,直到F中只剩下一棵樹位為止,這棵樹就是哈夫曼樹
      3. 哈夫曼樹的特點:
        1. 權值越大的結點,距離根節點越近
        2. 樹中沒有度為1的結點。
        3. 樹的帶權路徑長度最短。
      4. 哈夫曼編碼
        1. 前綴碼:任一字符的編碼串都不是另一個字符編碼串的前綴
        2. 哈夫曼編碼產生最短的前綴碼
      5. 哈夫曼n叉樹
        1. 無法構造時補0

樹-概念性總結及代碼示例