哈夫曼樹(C 實現方法)

2021-10-04 22:09:52 字數 1033 閱讀 3033

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

用乙個很簡單例子,儲存一篇英文文章時候,可能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

}

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

哈夫曼樹與哈夫曼編碼(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 定義哈...

哈夫曼樹C 實現

哈夫曼樹的介紹 huffman tree,中文名是哈夫曼樹或霍夫曼樹,它是最優二叉樹。定義 給定n個權值作為n個葉子結點,構造一棵二叉樹,若樹的帶權路徑長度達到最小,則這棵樹被稱為哈夫曼樹。這個定義裡面涉及到了幾個陌生的概念,下面就是一顆哈夫曼樹,我們來看 答。01 路徑和路徑長度 定義 在一棵樹中...