Huffman 哈夫曼樹 資料結構

2021-08-20 17:55:52 字數 1033 閱讀 5352

#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 構成一棵...