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