#includeusing namespace std;
int m = 0;
typedef struct htnode, *huffmantree; //動態分配陣列儲存哈夫曼樹
typedef char *huffmancode; //動態分配陣列儲存哈夫曼編碼表
void select(huffmantree ht, int n,int &s1,int &s2)
for (j = i + 1; j <= n; j++)
if (!ht[j].parent)
for (i = 1; i <= n; i++)
if ((ht[s1].weight>ht[i].weight) && (!ht[i].parent) && (s2 != i))s1 = i;
for (j = 1; j <= n; j++)
if ((ht[s2].weight>ht[j].weight) && (!ht[j].parent) && (s1 != j))s2 = j;
}void huffmancoding(huffmantree &ht, huffmancode hc,int n)
for (i = 1; i <= n; i++)
for (i = n + 1; i <= m; i++)
else
ht[i].weight = ht[s1].weight + ht[s2].weight;
} printf(" 下標 權值 父親 左孩子 右孩子");
for (j = 1; j <= i-1; j++)
//------無棧非遞迴遍歷哈夫曼樹,求哈夫曼編碼
cd = (char *)malloc(n*sizeof(char)); // 分配求編碼的工作空間
p = m; cdlen = 0;
for (i = 1; i <= m; ++i) // 遍歷哈夫曼樹時用作結點狀態標誌
ht[i].weight = 0;
while (p)
else if (ht[p].rchild == 0)
} else if (ht[p].weight == 1)
} else
}} // huffmancoding
void main()
getchar();
}
哈夫曼樹 1
題目1172 哈夫曼樹 題目描述 哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。輸入 輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 ...
哈夫曼樹及哈夫曼編碼 C
說明 1.讀取檔案中需進行哈夫曼編碼的資料資訊 2.構造生成單節點二叉樹組 森林 3.構造哈夫曼樹 4.進行哈夫曼編碼 5.輸出對應資料及其編碼 include include includeusing namespace std const int max n 100 最大容量 const int...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....