亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

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

2020-05-23 14:23:44
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++實現哈夫曼樹簡單創建與遍歷的方法,對于C++算法的學習來說不失為一個很好的借鑒實例,需要的朋友可以參考下
 
 

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

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

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

哈夫曼算法:

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

2. 在森林F中選取根節點權值最小二叉樹,作為左右字數構成一棵新的二叉樹,并使得新的二叉樹的根節點為
其左右字數權值之和,其中葉子都是最初的樹

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

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

#include <iostream>using namespace std;#define LEAFNUM 10        //葉子節點數,也就是權值樹#define HUFNUM 2*LEAFNUM#define MAXWEIGHT 999.9//*********存儲結構***********class HufTree;//***** Node**********class NODE{private: char Data;          //節點的數據域 double Weight;   //節點的權值域 int Lchild,Rchild,Parent;   //節點的左孩子右孩子及雙親域public: NODE()            //構造函數 { Data = '/0'; Weight = 0; Lchild = -1; Rchild = -1; Parent = -1;        //給節點的數據初始化 } int Re_L(){return Lchild;} int Re_R(){return Rchild;} char Re_Data(){return Data;} double Re_Weight(){return Weight;} friend class HufTree;     //聲明友元};//Node//********HufTree類**********class HufTree{private: int NodeNum; NODE HufArry[HUFNUM];public: HufTree(){NodeNum = 0;} void SetHuf(int,double,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){ HufArry[i].Data = ch; HufArry[i].Weight = wei;}void HufTree::CreatHuf(){ cout<<"每次查詢兩個最小樹的位置:"<<endl; for(int i = LEAFNUM; i < HUFNUM - 1; i++) { int p1 = 0; int p2 = 0; SelectMin(i,p1,p2);           //找出當前樹種權值最小的兩顆樹  cout<<p1<<"   < - >    "<<p2<<endl; HufArry[p1].Parent = i;   //設置兩顆最小樹的雙親 HufArry[p2].Parent = i; HufArry[i].Lchild = p1;   //設置這棵3節點的樹的根的權值以及孩子 HufArry[i].Rchild = p2;    HufArry[i].Weight = HufArry[p1].Weight + HufArry[p2].Weight; } cout<<"************************"<<endl;}void HufTree::SelectMin(int i,int &p1,int &p2){ int least1 = MAXWEIGHT; int least2 = MAXWEIGHT; for(int j = 0; j < i; j++) { if(HufArry[j].Parent == -1) {    if(HufArry[j].Weight < least1)  {  least2 = least1;  least1 = HufArry[j].Weight;  p2 = p1;  p1 = j;  }  else  {  if(HufArry[j].Weight < least2)  {   least2 = HufArry[j].Weight;   p2 = j;  }  } } }}void HufTree::Find_Root_and_Print(){ int root; for(int i = 0; i < HUFNUM - 1; i++) { if(HufArry[i].Parent == -1) {  root = i;  break; } } PrintHuf(root);}void HufTree::PrintHuf(int position){ if(NodeNum == LEAFNUM) {  return; } else { if(HufArry[position].Data != '/0') //如果是葉子節點 {  cout<<"權值:"<<HufArry[position].Weight<<"<-> 數據:"<<HufArry[position].Data<<" 此節點為葉子"<<endl;  NodeNum = NodeNum + 1; } else {  cout<<"權值:"<<HufArry[position].Weight<<" 此節點無數據域,不是葉子"<<endl;  PrintHuf(HufArry[position].Lchild);  PrintHuf(HufArry[position].Rchild); } }   }int main(){ HufTree Tree; cout<<"請輸入"<<LEAFNUM<<"對(權值,數據):"<<endl; double wei; char ch; for(int i = 0; i < LEAFNUM; i++) { cin>>wei; cin>>ch; Tree.SetHuf(i,wei,ch); } Tree.CreatHuf();     //創建哈夫曼樹 Tree.Find_Root_and_Print();           //遍歷哈夫曼樹 return 0;}

測試結果:

1 a2 b5 c7 d4 e13 f3 g6 h11 i8 l

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲精品一区| 国产精品白丝jk喷水视频一区| 欧美日韩在线视频一区二区| 精品久久久久人成| 热99精品只有里视频精品| 久久中文久久字幕| 影音先锋欧美在线资源| 国产主播在线一区| 91美女片黄在线观| 亚洲性av在线| 亚洲人成电影网| 亚洲va欧美va国产综合久久| 国产亚洲精品成人av久久ww| 久久久久久久久久av| 国产成人免费91av在线| 久久亚洲春色中文字幕| 国产精品中文字幕在线| 一道本无吗dⅴd在线播放一区| 日韩精品在线视频美女| 国产日韩精品在线观看| 亚洲欧美成人一区二区在线电影| …久久精品99久久香蕉国产| 欧美激情成人在线视频| 97色在线视频| 国产精品久久久久久婷婷天堂| 欧美一级电影在线| 中文字幕综合一区| 国产精品久久久久久久天堂| 亚洲淫片在线视频| 夜夜嗨av色一区二区不卡| 欧美亚洲另类在线| 日韩高清中文字幕| 亚洲欧美一区二区精品久久久| 国产偷国产偷亚洲清高网站| 欧洲中文字幕国产精品| 精品国产乱码久久久久久婷婷| 久久亚洲精品成人| 色悠悠国产精品| 91精品在线观看视频| 亚洲色图18p| 久久成人一区二区| 91av视频在线播放| 黑人巨大精品欧美一区免费视频| 亚洲精品成a人在线观看| 亚洲美女性视频| 91成人在线播放| 国产精品视频久久久久| 欧美大胆在线视频| 最近2019年中文视频免费在线观看| 福利视频导航一区| 欧美裸身视频免费观看| 欧洲日本亚洲国产区| 亚洲精品视频免费在线观看| 日本精品视频在线观看| 菠萝蜜影院一区二区免费| 国产999在线| 欧美成人激情视频| 成人免费大片黄在线播放| 欧美成人免费观看| 国产精品私拍pans大尺度在线| 日韩精品在线观看网站| 国产久一一精品| 亚洲国产精品悠悠久久琪琪| 亚洲国产天堂网精品网站| 欧美一级视频一区二区| 日韩有码在线播放| 成人午夜一级二级三级| 日韩在线视频线视频免费网站| 热re99久久精品国产66热| 91视频九色网站| 欧美亚洲日本网站| 国产成人jvid在线播放| 亚洲免费av片| 成人免费黄色网| 成人免费视频xnxx.com| 亚洲精品98久久久久久中文字幕| 在线视频日本亚洲性| 久久99精品视频一区97| 久久久免费观看| 992tv成人免费视频| 国产在线98福利播放视频| 国产精品日韩一区| 久久久久久国产精品| 欧美日韩成人在线观看| 懂色av一区二区三区| 午夜精品久久久久久久99黑人| 亚洲人精品午夜在线观看| 亚洲欧美日韩精品久久亚洲区| 日韩欧美福利视频| 精品国产依人香蕉在线精品| 国内精品小视频在线观看| 国产一区二区三区视频在线观看| 欧美黑人狂野猛交老妇| 亚洲精品综合精品自拍| 亚洲第一区中文字幕| 色播久久人人爽人人爽人人片视av| 中文字幕精品在线视频| 成人a级免费视频| 欧美孕妇毛茸茸xxxx| 俺去啦;欧美日韩| 久久精品电影一区二区| 亚洲天堂av女优| 国产精品欧美日韩| 少妇av一区二区三区| 欧美日本高清视频| 555www成人网| 91在线观看免费高清完整版在线观看| 美日韩精品免费视频| 久久天天躁狠狠躁老女人| 国内精品久久久久影院 日本资源| 亚洲午夜精品久久久久久性色| 亚洲国产精品字幕| 欧美性xxxx18| 久久影视三级福利片| 亚洲欧美自拍一区| 日本一区二区三区在线播放| 久久精品视频导航| 欧美大尺度在线观看| 91精品久久久久久久| 欧美成人合集magnet| 国产福利精品在线| 成人激情电影一区二区| 国产精品亚洲美女av网站| 高清视频欧美一级| 日韩美女免费线视频| 久久免费福利视频| 欧美丰满少妇xxxxx做受| 欧美性xxxxx极品| 久久久噜噜噜久噜久久| 精品二区三区线观看| 国产精品久久久久999| 国产精品爽黄69天堂a| 久久亚洲一区二区三区四区五区高| 国外视频精品毛片| 亚洲精品短视频| 成人免费高清完整版在线观看| 久久久久北条麻妃免费看| 日韩大片免费观看视频播放| 成人免费福利视频| 亚洲乱码av中文一区二区| 91精品久久久久久久久久久久久久| 国产91亚洲精品| 欧美壮男野外gaytube| 中文国产成人精品久久一| 亚洲精品国产综合区久久久久久久| 91av免费观看91av精品在线| 2019中文字幕在线免费观看| 亚洲缚视频在线观看| 亚洲国产精品va在线观看黑人| 日韩av在线最新| 日韩电影大片中文字幕| 欧美激情奇米色| 亚洲色图第一页| 奇门遁甲1982国语版免费观看高清| 日韩欧美a级成人黄色| 中文字幕亚洲自拍| 久久久视频精品| 欧美激情在线观看视频| 国产精品久久久久久久app| 欧美激情精品久久久久久| 国产精品xxxxx| 国产日韩欧美在线看| 欧美裸体视频网站| 日本精品视频在线观看|