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

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

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

2020-02-24 14:26:57
字體:
來源:轉載
供稿:網友

哈夫曼樹是路徑長度加權的最短樹,它可用于構造信息傳輸、數據壓縮等的最優編碼,今天武林技術頻道小編來為大家介紹C++實現哈夫曼樹簡單創建與遍歷的方法,大家一定不要錯過哦。

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

哈夫曼算法:

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;}武林技術頻道小編在上文為大家分享了C++實現哈夫曼樹簡單創建與遍歷的方法,如果我們要學習編程知識,一定不能錯過武林技術頻道哦!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频在线免费看| 国产欧美精品一区二区| 久久久久久久久久久成人| 亚洲自拍高清视频网站| 日韩视频中文字幕| 亚洲综合日韩在线| 精品视频久久久| 精品成人69xx.xyz| 欧美精品videosex极品1| 久久精品亚洲94久久精品| 亚洲精品乱码久久久久久金桔影视| 茄子视频成人在线| 国产精品青草久久久久福利99| 亚洲精品一区二区在线| 成人www视频在线观看| 色综合天天狠天天透天天伊人| 欧美视频在线观看免费| 另类少妇人与禽zozz0性伦| 欧美日在线观看| 亚洲欧洲日产国产网站| 日韩在线精品视频| 亚洲xxxxx| 久久综合国产精品台湾中文娱乐网| 国产91网红主播在线观看| 欧美精品videofree1080p| 日韩视频欧美视频| 日韩欧美有码在线| 亚洲视频综合网| 日韩电影在线观看永久视频免费网站| 欧美一区二区色| 欧美另类老女人| 国产精品高清在线观看| 亚洲www在线| 日韩极品精品视频免费观看| 成人高清视频观看www| 欧美精品久久久久久久久| 在线精品视频视频中文字幕| 国产日产欧美a一级在线| 欧美精品国产精品日韩精品| 亚洲精品国精品久久99热一| 萌白酱国产一区二区| 亚洲精选中文字幕| 国产精品美乳一区二区免费| 国产这里只有精品| 精品久久久999| 播播国产欧美激情| 91精品成人久久| 美女av一区二区| 成人午夜在线视频一区| 亚洲人成网站在线播| 国产精品久久久久久久久久ktv| 亚洲热线99精品视频| 日韩精品视频免费专区在线播放| 欧美日韩成人免费| 亚洲爱爱爱爱爱| 欧美精品精品精品精品免费| 伦理中文字幕亚洲| 欧美老女人在线视频| 亚洲成年人在线播放| 日韩中文字幕国产| 日韩电影中文字幕一区| 欧美亚洲午夜视频在线观看| 欧美高跟鞋交xxxxhd| 精品欧美一区二区三区| 欧美激情精品久久久久| 中文字幕一区二区精品| 国产99视频在线观看| 国产啪精品视频网站| 国产日韩精品视频| 国产精品扒开腿做爽爽爽的视频| 视频一区视频二区国产精品| 国产精品久久久久久久久久久新郎| 91精品国产免费久久久久久| 久久人人爽人人爽人人片av高请| 日韩在线观看精品| 精品一区精品二区| 98精品国产自产在线观看| 日韩小视频网址| www.日韩欧美| 国产日韩精品在线播放| 久久影院中文字幕| 狠狠躁夜夜躁人人爽超碰91| 亚洲高清免费观看高清完整版| 精品久久久久久久中文字幕| 日韩av一区二区在线| 国产精品久久久久久久久久东京| 全色精品综合影院| 日韩麻豆第一页| 亚洲欧美日韩成人| 九九视频直播综合网| 狠狠久久五月精品中文字幕| 久久天天躁狠狠躁夜夜av| 一区二区三区视频免费| 久久久国产视频91| 欧美精品videos| 精品国产一区二区三区在线观看| 国产精品美女免费视频| 日韩成人在线观看| 亚洲一区二区中文| 日韩一区二区久久久| 欧美高清视频在线| 好吊成人免视频| 国产精品男女猛烈高潮激情| 久久久久这里只有精品| 91国在线精品国内播放| 久久夜色精品国产欧美乱| 久久精品99国产精品酒店日本| 丝袜美腿亚洲一区二区| 亚洲精品美女在线观看| 国产精品久久久久久网站| 国产精品一区二区三区久久久| 在线色欧美三级视频| 精品在线欧美视频| 欧美日韩福利在线观看| 亚洲精品av在线播放| 26uuu另类亚洲欧美日本一| 亚洲一区二区少妇| 在线精品91av| 欧美激情精品久久久久久黑人| 精品中文视频在线| 最好看的2019年中文视频| 亚洲精品久久久久中文字幕二区| 中文国产成人精品久久一| 亚洲系列中文字幕| 欧美亚洲国产视频| 91久久夜色精品国产网站| 国产剧情日韩欧美| 精品小视频在线| 97超级碰在线看视频免费在线看| 日韩精品视频免费专区在线播放| 色777狠狠综合秋免鲁丝| 中文字幕久热精品在线视频| 亚洲激情视频在线观看| 国产综合在线看| 日韩欧美国产免费播放| 97精品免费视频| 少妇激情综合网| 96精品视频在线| 亚洲国产精品大全| 91九色国产在线| 欧美日韩成人在线视频| 国产女同一区二区| 3344国产精品免费看| 亚洲毛茸茸少妇高潮呻吟| 精品国内自产拍在线观看| 久久精品国产清自在天天线| 社区色欧美激情 | 国产精品99久久久久久白浆小说| 亚洲欧美综合区自拍另类| 狠狠爱在线视频一区| 亚洲最新中文字幕| 亚洲视频视频在线| 亚洲成年人影院在线| 精品国内自产拍在线观看| 国产精品一区二区久久久久| 久久亚洲影音av资源网| 欧美日韩国产专区| 96精品久久久久中文字幕| 91av视频在线观看| 国产精品久久国产精品99gif| 国产精品成人免费视频| 亚洲新中文字幕| 欧美怡春院一区二区三区| 精品动漫一区二区|