?? 算法 6.18.txt
字號:
算法 6.18
void CreateHuffmanTree(HuffmanTree &HT, int *w, int n) {
// w存放n個權值(均>0),構造赫夫曼樹HT
if (n<=1) return;
m = 2 * n - 1;
HT.HTree = new HTNode[m]; // 為赫夫曼樹分配一組順序空間
for (p=HT.Tree, i=1; i<=n; ++i, ++p, ++w) *p = { *w, -1, -1 };
// n個帶權結點形成初始化的森林,每個結點的左、右孩子為空
for ( ; i<=m; ++i, ++p) *p = { 0, -1, -1 }; // 對尚未使用的結點賦初值
for (i=n; i<m; ++i) { // 建赫夫曼樹
Select(HT.Htree, i-1, s1, s2);
// 在HT.Htree[0..i-1]當前可選的結點中選擇權值
// 最小的兩個結點,其序號分別為s1和s2。
HT.Htree [i].lchild = s1; HT.Htree[i].rchild = s2;
HT.Htree[i].weight = HT.Htree[s1].weight + HT.Htree[s2].weight;
// 取左、右子樹根結點權值之和
}
HT.root = m-1;
} // CreatHuffmanTree
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -