C 實現哈夫曼樹簡單建立與遍歷的方法

2022-10-03 15:48:10 字數 1545 閱讀 1374

本文以例項形式講述了c++實現哈夫曼樹簡單建立與遍歷的方法,比較經典的c++演算法。

本例實現的功能為:給定n個帶權的節點,如何構造一棵n個帶有給定權值的葉節點的二叉樹,使其帶全路徑長度wpl最小。

據此構造出最優樹演算法如下:

哈夫曼演算法:

1. 將n個權值分別為w1,w2,w3,....wn-1,wn的節點按權值遞增排序,將每個權值作為一棵二叉樹。構成n棵二叉樹森林f=,其中每個二叉樹都只有乙個權值,其左右字數為空

2. 在森林f中選取根節點權值最小二叉樹,作為左右字數構成一棵新的二叉樹,並使得新的二叉樹的根節點為

其左右字數權值之和,其中葉子都是最初的樹

3. 在森林f中刪除這兩棵樹,同時將新得到的二叉樹代替這兩個樹加入到森林f中,因此森林中二叉樹的個數比以前少一顆

4. 對新的森林重複2和3,知道森林中只有一棵樹位置,這棵樹就是哈夫曼樹.

#include

using namespace std;

#define leafnum 10 //葉子節點數,也就是權值樹

#define hufnum 2*leafnum

#define maxweight 999.9

//*********儲存結構***********

class huftree;

//***** node**********

class node

int re_l()

int re_r()

char re_data()

double re_weight()

friend class huftree; //宣告友元

};//node

//********huftree類**********

class huftree

void sethuf(int,doubwww.cppcns.comle,char); //設定權值與資料域

void creathuf(); //建立哈夫曼樹

void selectmin(int,int&,int&); //查詢哈夫曼樹種兩個權值最小的樹

void find_root_and_print(); //查詢樹根節點位置

void printhuf(int); //遍歷哈夫曼樹

};//huftree

void huftree::sethuf(int i,double wei,char ch)

void huftree::creathuf()

cout< 資料:"《程式設計客棧}

int main()

tree.creathuf(); //建立哈夫曼樹

tree.find_root_and_print(); //遍歷哈夫曼樹

return 0;

}測試結果:

1 a2 b5 c

7 d4 e

13 f

3 g6 h

11 i

8 l本文標題: c++實現哈夫曼樹簡單建立與遍歷的方法

本文位址:

哈夫曼樹與哈夫曼編碼(C 實現)

1 對給定的n個權值構成n棵二叉樹的初始集合f 其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。2 在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。3 從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到...

ACM哈夫曼樹建立 哈夫曼編碼C 實現

include stdafx.h include define max 20 using namespace std typedef char valtype typedef double wghtype struct hfmnode 每個節點的編碼 code儲存編碼 start儲存編碼是從code...

ACM哈夫曼樹建立 哈夫曼編碼C 實現

include stdafx.h include define max 20 using namespace std typedef char valtype typedef double wghtype struct hfmnode 每個節點的編碼 code儲存編碼 start儲存編碼是從code...