C 實現哈夫曼樹的方法

2022-10-03 15:45:14 字數 969 閱讀 7039

序言

對於哈夫曼編碼,個人的淺薄理解就是在壓縮儲存空間用很大用處。

用乙個很簡單例子,儲存一篇英文文章時候,可能a出現的概率較大,z出現的記錄較小,如果正常儲存,可能a與z儲存使用的空間一樣。但是用哈夫曼編碼方式,a經常出現,所用編碼長度就短。

構造哈夫曼樹,生成哈夫曼編碼

一、定義節點型別

struct node

};二、定義樹型別(節點陣列)

三要素:不定長陣列,元素大小,有效元素個數

struct roota

~roota()

};三、建立哈夫曼樹

1.將每乙個節點都當成一棵樹,初始化陣列大小,並進行賦值

roota ra(4);

//1.在ra.nodea中存入字母和權值

for (ra.n = 0;ra.n < ra.size;ra.n++)

2.將樹按權值大小排序

void sort(roota *ra)

} if (!esc) return;

}}3.(1)遍歷陣列,將ra.nodea[0]和ra.node[1]合併,其餘向前移動,重新排序

(2)將ra.nodea[0],ra.nodea[1]分別放在新合併的ra.nodea[0]的左右子結點中

while (ra.n > 1)

ra.n = ra.n - 1;

//2.排序

sort(&ra);

}4.輸出哈夫曼編碼

遞迴,找到葉子節點,記錄路徑,左記錄0,右記錄1,直到輸出所有葉子節點

void cratecode(node *t,string &s)

else {

cout << "哈夫曼編碼:";

cout << t->c << ":" << s<

以上是對構造哈夫曼樹以及生成哈夫曼編碼的總結,希望對你們有所幫助!

本文標題: c++實現哈夫曼樹的方法

本文位址:

哈夫曼樹(C 實現方法)

對於哈夫曼編碼,個人的淺薄理解就是在壓縮儲存空間用很大用處。用乙個很簡單例子,儲存一篇英文文章時候,可能a出現的概率較大,z出現的記錄較小,如果正常儲存,可能a與z儲存使用的空間一樣。但是用哈夫曼編碼方式,a經常出現,所用編碼長度就短。一 定義節點型別 struct node 二 定義樹型別 節點陣...

哈夫曼樹與哈夫曼編碼(C 實現)

1 對給定的n個權值構成n棵二叉樹的初始集合f 其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。2 在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。3 從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到...

哈夫曼樹 C 實現

include using namespace std define maxbit 10 define maxvalue 10000 define maxleaf 100 define maxnode maxleaf 2 1 定義哈夫曼樹編碼型別 typedef structcodetype 定義哈...