哈夫曼樹的儲存和生成演算法

2021-12-30 03:52:03 字數 1179 閱讀 1806

/*

* copyright (c) 2017,煙台大學計算機學院

* all right reserved.

* 檔名稱:btree

* 作者:尹娜

* 完成日期:2023年11月9日

* 版本號:v1.0

*

* 問題描述:哈夫曼樹

* 輸入描述:標準函式輸入

* 程式輸出:哈夫曼編碼及其平均長度

#define n 50 //葉子結點數

#define m 2*n-1 //樹中結點總數

//哈夫曼樹的節點結構型別

typedef struct

htnode;

//每個節點哈夫曼編碼的結構型別

typedef struct

hcode;

//構造哈夫曼樹

void createht(htnode ht,int n)

{ int i,k,lnode,rnode;

double min1,min2;

for (i=0; i<2*n-1; i++) //所有結點的相關域置初值-1

ht[i].parent=ht[i].lchild=ht[i].rchild=-1;

for (i=n; i<2*n-1; i++) //構造哈夫曼樹

{min1=min2=32767; //lnode和rnode為最小權重的兩個結點位置

lnode=rnode=-1;

for (k=0; k<=i-1; k++)

if (ht[k].parent==-1) //只在尚未構造二叉樹的結點中查詢

{if (ht[k].weight

執行結果:

哈夫曼樹和哈夫曼演算法

1 最優二叉樹 具有最小加權路徑長度的二叉樹 2 哈夫曼演算法 由哈夫曼給出,用於構造最優二叉樹的演算法 3 哈夫曼樹 用哈夫曼演算法構造的最優二叉樹 4 哈夫曼演算法 很熟,所以就略了 5 函式createhfmtree的步驟 首先,構造n棵哈夫曼樹的物件,每棵樹只有乙個權值為w i 的根節點,且...

生成哈夫曼樹

有n個數,把它們合成1個數,每次的代價是兩數之和,問最小代價。哈夫曼樹的模板題,每次去兩個最小的數,相加,再把它們的和加入陣列。include include include include include include include includeusing namespace std typ...

C C 實現哈夫曼樹和生成哈夫曼編碼

用c語言實現哈夫曼樹和生成哈夫曼編碼,首先生成哈夫曼樹,哈夫曼樹是從中選取權值最小的兩個進行相加,將這兩個分別做為生成的左子樹和右子樹,左子樹要比右子樹小。然後將相加得到的值從新放入,然後又從中找到最小的兩個值,然後用這個兩個值一直相加,直到只剩最後乙個值,將這個值作為哈夫曼樹的根。生成哈夫曼編碼,...