本次分享輸入乙個字串輸出其赫夫曼樹編碼的**,自己測試的時候沒有出現錯誤,希望大家幫我測試一下正誤,修改一下,謝謝啦!
我的**的
雲共享:
提取碼 2b2a
#include#includeusing namespace std;
struct htnode
;//哈夫曼樹的結點結構
#define maxsize 1000//哈夫曼數儲存的最大葉子節點數
class chtree
void creat();//錄入二叉樹的所有資訊
void huffmancode();
int select(int i);//函式在ht[1]到ht[i]中選擇parent為0 且weight 最小的結點,並將結點序號返回
void display();
private:
htnode* ht;//結點陣列指標
int m;
int n;//葉子結點數
int s1;
int s2;
string a;//儲存輸入的字串
string str[maxsize];//儲存葉子結點的哈夫曼編碼
};//哈夫曼樹類
void chtree::creat()
else
k++;
}return s;
}void chtree::huffmancode()
for(;i<=m;i++)//非葉子節點的初始化
//----以下完成哈夫曼樹的構建
for(i=n+1;i<=m;i++)
//下面的程式完成從葉子到根逆向求每個字元的哈夫曼編碼
int c,f;
int j;
for(j=1;j<=n;j++)
//在字串str[i]的第0 位置插入字元「0」
else
//在字串str[i]的第0 位置插入字元「1」
}}void chtree::display()
{ cout<<"字元"<<'\t'<<"權值"<<'\t'<<"哈夫曼編碼"<
赫夫曼樹編碼問題
定義 結點的帶權路徑長度為從該結點到樹根之間的路徑長度與結點上權的乘積。樹的帶權路徑長度為樹中所有葉子結點的帶權路徑長度之和。假設有n個權值,試構造一棵有n個葉子結點的二叉樹,每個葉子結點帶權為wi,則其中帶權路徑長度最小的二叉樹稱做最優二叉樹或赫夫曼樹。構造赫夫曼樹的方法 1 根據給定的n個權值構...
赫夫曼樹與赫夫曼編碼
問題描述 利用huffman編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接受端將傳來的資料編碼進行解碼 復原 對於有些通道,每端都需要乙個完整的編 解碼系統。試為這樣的資訊收發站編寫乙個huffman的編 解碼系統。給...
赫夫曼樹和赫夫曼編碼
赫夫曼樹 1 先把有權值的葉子節點按照從小到大的順序排成乙個有序序列,即 a 5 e 10 b 15 d 30 c 40 2 取前兩個權值最小的結點即a 5 和e 10 作為乙個新的結點n1的兩個子節點,結點權值較小的作為左結點,即a為左結點,e為右結點,n1的權值為兩個結點權值的和,即5 10 1...