#include "iostream"
#include "string.h"
using namespace std;
//定義哈夫曼樹儲存結構
typedef structhtnode,*huffmantree;
//定義哈夫曼編碼儲存結構
typedef char** huffmancode;
//選擇兩個最小權重的結點
void selectmin(huffmantree ht,int n,int &s1,int &s2)
//查詢權重第一小的結點
for(;i<=n;i++)
for(i=1;i<=n;i++)
if(ht[i].parent==0 && i!=s1)
//查詢權重第二小的結點
for(i=1;i<=n;i++)
if(ht[i].parent==0 && i!=s1)
if(ht[i].weights2=i;
}//建立哈夫曼樹
void createhuffmantree(huffmantree &ht,int *w,int n)
//初始化n-1個非葉結點
for(;i<=m;i++)
for(i=n+1;i<=m;i++)
}//對立哈夫曼編碼
void createhuffmancode(huffmancode &hc,huffmantree ht,int n)
hc[i]=new char[n-start];
strcpy(hc[i],&cd[start]); }}
//列印哈夫曼編碼
void printhuffmancode(huffmancode hc,huffmantree ht,int n)
}void main();
createhuffmantree(ht,w,n);
createhuffmancode(hc,ht,n);
printhuffmancode(hc,ht,n);
}
資料結構 Huffman樹(霍夫曼樹 哈夫曼樹)
給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。結構定義 template typename elemtype struct huffmannod...
哈夫曼樹(huffman)
學完了huffman樹,講一下自己對它的理解 圖二public class huffmantree override public int compareto nonnull treenodeo else if this.weight o.weight return 0 傳乙個陣列進來 建立哈夫曼樹...
Huffman樹(哈夫曼樹)
哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的權值乘上其到根結點的路徑長度 若根結點為0層,葉結點到根結點的路徑長度為葉結點的層數 樹的帶權路徑長度記為wpl w1 l1 w2 l2 w3 l3 wn ln n個權值wi i 1,2,n 構成一棵...