C 實現Huffman最優二叉樹

2022-09-22 22:39:31 字數 2255 閱讀 6733

huffman最優二叉樹對於壓縮編碼具有重要作用

[cpp]

/*huffman樹——最優二叉樹*/ 

#include   

#include   

#include   

using namespace std; 

//定義節點結構體型別  

typedef struct node ; 

node()  

} node; 

//存放節點的向量  

vector nodes; 

//存放節點編號的向量  

vector pnodes; 

//初始化最小帶權路徑和  

int sum = 0; 

//按照節點編號對應節點的值對編號進行排序  

bool sortpnode(int a, int b)   

//利用遞迴遍歷huffman樹實現輸出  

void output(node *tree) 

//用葉子深度乘以  

sum += level * tree->val;         

cout << "深度:" << level << ", 節點值:" << tree->val << ",帶權路徑和=" << sum << endl;        

} }  

int main() 

,          n = sizeof(values)/sizeof(int);  

int cnt = n; 

node *tnode; 

//直接在nodes中放入(2 + n) * n / 2  

nodes.resize(2 * n - 1); 

//為pnodes設定n個元素,且每個元素——即節點編號為-1  

pnodes.resize(n, -1); 

//為節點賦值  

for(int i = 0; i < n; i++) 

//迴圈  

while(pnodes.size() > 1) 

//nodes[cnt-1]為樹的根節點  

//輸出樹  

output(&nodes[cnt-1]); 

//輸出huffman樹的最小帶權路徑長度  

cout << "最小帶權路徑長為:" << sum << endl; 

return 0; 

} /*huffman樹——最優二叉樹*/

#include

#include

#include

using namespace std;

//定義節點結構體型別

typedef struct node ;

node()

} node;

//存放節點的向量

vector nodes;

//存放節點編號的向量

vector pnodes;

//初始化最小帶權路徑和

int sum = 0;

//按照節點編號對應節點的值對編號進行排序

bool sortpnode(int a, int b)

//利用遞迴遍歷huffman樹實現輸出

void output(node *tree)

//用葉子深度乘以

sum += level * tree->val;  

cout << "深度:" << level << ", 節點值:" << tree->val << ",帶權路徑和=" << sum << endl;   }}

int main()

,     n = sizeof(values)/sizeof(int); 

int cnt = n;

node *tnode;

//直接在nodes中放入(2 + n) * n / 2

nodes.resize(2 * n - 1);

//為pnodes設定n個元素,且每個元素——即節點編號為-1

pnodes.resize(n, -1);

//為節點賦值

for(int i = 0; i < n; i++)

//迴圈

while(pnodes.size() > 1)

//nodes[cnt-1]為樹的根節點

//輸出樹

output(&nodes[cnt-1]);

//輸出huffman樹的最小帶權路徑長度

cout << "最小帶權路徑長為:" << sum << endl;

return 0;} 

huffman樹(最優二叉樹 和huffman編碼

在許多實際應用中,數中結點常常被賦予乙個表示某種意義的數值,稱為該結點的權。從樹根結點到任意結點的路徑長度 經過的邊數 與該結點上權值的乘積稱為該結點的帶權路徑長度。數中所有葉結點的帶權路徑長度之和稱為該樹的帶權路徑長度 特點 1.每個初始結點最終都成為葉結點,且權值越小的結點到根節點的路徑長度越大...

HUFFMAN數(最優二叉樹)的構造(陣列實現)

一 基本概念 1 赫夫曼 huffman 樹又稱最優二叉樹或最優搜尋樹,是一種帶權路徑長度最短的二叉樹。在許多應用中,常常賦給樹中結點乙個有某種意義的實數,稱此實數為該結點的權。從樹根結點到該結點之間的路徑長度與該結點上權的乘積稱為結點的帶權路徑長度 wpl 樹中所有葉子結點的帶權路徑長度之和稱為該...

最優二叉樹

include include includetypedef struct huffmantree typedef char huffmancode 赫夫曼編碼 void selectnode huffmantree ht,int n,int bt1,int bt2 從1 i 1個結點選擇paren...