構造哈夫曼樹演算法C C

2021-07-24 04:57:46 字數 1281 閱讀 9687

一、哈夫曼樹的基本概念

最優二叉樹也稱哈夫曼樹,是指對於一組帶有確定權值的葉節點,構造的具有最小帶權路徑長度的二叉樹。

二、哈夫曼樹的結構

假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:

(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有乙個結點);

(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;

(3)從森林中刪除選取的兩棵樹,並將新樹加入森林;

(4)重複(2)、(3)步,直到森林中只剩一棵樹為止,該樹即為所求得的哈夫曼樹

三、構造哈夫曼樹演算法

/*

*構造哈夫曼樹演算法

*/#include

#include

#define maxvalue 1000 //定義最大權值

#define maxleaf 30 //定義最大葉子樹

#define maxnode 2 * maxleaf - 1

/* *定義哈夫曼樹的儲存結構

*/typedef

struct

hnodetype ;

/* *構造哈夫曼樹演算法

*/void haffmantree(hnodetype huffnode )

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

/**構造哈夫曼樹

*/for(i = 0 ; i < n - 1 ; i++)

else

if(huffnode[j].weight < m2 && huffnode[j].parent == -1)}/*

*將找出的兩棵子樹合併為一棵子樹

*/huffnode[x1].parent = n + i ;

huffnode[x2].parent = n + i ;

huffnode[n+i].weight = huffnode[x1].weight + huffnode[x2].weight ;

huffnode[n+i].lchild = x1 ;

huffnode[n+i].rchild = x2 ;

}for(i = 0 ; i < 2 * n - 1 ; i++)

}/**進行哈夫曼樹的測試

*/void main()

哈夫曼樹的構造演算法,哈夫曼編碼演算法

include define max 100 define maxvalue 500 typedef struct int weight int parent,lchild,rchild node 哈夫曼樹結點型別 以下部分定義哈夫曼編碼儲存結構 typedef structcodetype typ...

構造哈夫曼樹 哈夫曼編碼

1.權值越大的節點,距離根越近 2.樹中沒有度為1的節點,這類樹叫正則 嚴格 二叉樹,樹的總節點 2 雙分支結點 1 單分支結點 雙分支結點 3.樹的帶權路勁 wpl 所有葉子結點的帶權長度路勁之和 長度最短。嗶哩嗶哩王卓老師的口訣 構造森林全是根,選用兩小選新樹,刪除兩小添新人,重複23剩單根 1...

哈夫曼樹構造 哈夫曼編碼

一 哈夫曼樹 p189 1.定義 帶權路徑長度 wpl 最小的二叉樹稱為哈夫曼樹 wpl 樹中所有葉子節點的帶權路徑長度之和 帶權路徑長度 從樹根到任意節點的路徑長度與該節點上權值的乘積 2.構造 1 將這n個節點分別作為n課僅含乙個結點的二叉樹,構成森林f 2 構造乙個新節點,從f中選取兩棵根節點...