給定權值求哈弗曼樹

2021-10-06 04:37:14 字數 1428 閱讀 5427

#include

#include

using namespace std;

#define maxsize 10

typedef

int elemtype;

typedef

struct btreenode

btreenode;

//根據陣列 a 中 n 個權值建立一棵哈夫曼樹,返回樹根指標

btreenode*

createhuffman

(elemtype a,

int n)

for(

int i =

1; i < n; i++

)//進行 n-1 次迴圈建立哈夫曼樹

if(b[j]

!=null)}

for(

int j = k2; j < n; j++

)//從當前森林中求出最小權值樹和次最小//從k2開始:先比較k1和k2

else

if(b[j]

->data < b[k2]

->data)

k2 = j;}}

//由最小權值樹和次最小權值樹建立一棵新樹,q指向樹根結點

q =(btreenode*

)malloc

(sizeof

( btreenode));

q->data = b[k1]

->data + b[k2]

->data;

q->left = b[k1]

; q->right = b[k2];

b[k1]

= q;

//將指向新樹的指標賦給b指標陣列中k1位置

b[k2]

=null

;//k2位置為空

}free

(b);

//刪除動態建立的陣列b

return q;

//返回整個哈夫曼樹的樹根指標

}//3、求哈夫曼樹的帶權路徑長度

elemtype weightpathlength

(struct btreenode* fbt,

int len)

//len初始為0

}void

disptree

(btreenode* b)

for(i =

1; i <= n; i++

)printf

(" ");

printf

("%d(%s)\n"

,p->data,type)

; top--;if

(p->right !=

null)if

(p->left !=

null)}

}}//主函式

intmain

(void

)

給定權值,哈弗曼編碼 解碼

假設某通訊報文的字符集由a,b,c,d,e,f這6個字元組成,它們在報文 現的頻度 頻度均為整數值 1 構造一棵哈弗曼樹,依次給出各字元編碼結果。2 給字串進行編碼。3 給編碼串進行解碼。構建哈弗曼樹時 左子樹根結點權值小於等於右子樹根結點權值。生成編碼時 左分支標0,右分支標1。第一行 依次輸入6...

哈弗曼編碼 哈弗曼樹

哈弗曼編碼是依賴於字元使用頻率來建立的一種編碼,通過把使用頻率低的字元分配相對較多的01編碼,而使用頻率高的分配相對較低的01編碼,來建立最小的帶權路徑長度的樹,來最大化的獲得編碼儲存空間的一種編碼規則。這個樹稱為哈弗曼樹,也稱為最優二叉樹。這樣可以確定每乙個字元的編碼不可能成為其他字元編碼的坐子串...

求哈夫曼樹的權值

哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 n 1000 輸出權值。5 1 2 2 ...