哈夫曼树唯一吗(哈夫曼树)
大家好,我是小房,我来为大家解答以上问题。哈夫曼树唯一吗,哈夫曼树很多人还不知道,现在让我们一起来看看吧!
1、#include#include #define MAXSIZE 30/*自定义哈夫曼的最大个数*/ typedef struct { int weight;/*结点的权值*/ int parent;/*结点的双亲*/ int lchild;/*结点的左孩子*/ int rchild;/*结点的右孩子*/ int flag;/*是否用过的标志*/ }HufmTree; int p1,p2;/*定义全局下标数字,用于Select()函数返回当前哈夫曼树中最小 两个未用的结点/森林的下标*/ void CreatHuffman(HufmTree tree[] ,int n );/*构造哈夫曼树函数*/ void Select(HufmTree tree[] ,int i );/*选择最小两个森林的函数*/ void DisplayTree(HufmTree tree[],int Number);/*输出哈夫曼树函数*/ void main() { int InputNumber;/*输入森林结点的个数*/ printf("******本程序用于演示哈夫曼树的构造结果***** "); HufmTree mytree[MAXSIZE];/*声名一个棵哈夫曼树*/ printf("请输入结点个数: "); scanf("%d",&InputNumber); CreatHuffman( mytree,InputNumber );//构造哈夫曼树 DisplayTree(mytree,InputNumber);//输出哈夫曼树 } /*-------------------------------------------- *函数功能:构造哈夫曼树 *函数参数:自定义构造体,结构体数组 *函数返回值:没有 --------------------------------------------*/ void CreatHuffman(HufmTree tree[] ,int n ) { int i,m; if(n<=1)/*森林个数小于或等于一退出*/ { return; } m=2*n;/*所建哈夫曼树最后结点的最大个数-1*/ for(i=1;itree[j].weight))/*跳过于用过的结点(用过后不是森*/ { /*林中的结点)*/ MinValue1=tree[j].weight;/*如果后面森林的结点值比MinValue1小*/ p1=j; /*P1就指向它*/ } } tree[p1].flag=1;/*把tree[p1]从森林中去掉,它已经用过*/ /*也为了p1 p2 不为同一个值*/ for( i=1;tree[i].flag!=0;i++)/*找到前中tree[i]没有个的第一个结点*/ { /*找到森林中的一个结点*/ } MinValue2=tree[i].weight;/*把找到的结点当做最小的结点*/ p2=i;/*第二小值结点的下标值*/ for(j=i+1;j<=number;j++) { if((tree[j].flag!=1)&&(MinValue2>tree[j].weight))/*跳过于用过的结点(用过后不是森*/ { /*林中的结点)*/ MinValue2=tree[j].weight;/*如果后面森林的结点值比MinValue1小*/ p2=j; /*P1就指向它*/ } } } /*-------------------------------------------- *函数功能:输出哈夫曼树 *函数参数:参数1 自定义构造体,结构体数组。
2、 * 参数2 输入结点的个数 *函数返回值:没有 --------------------------------------------*/ void DisplayTree(HufmTree tree[],int Number) { for(int i=1;i<2*Number;i++) { printf("%5d",tree[i].weight); } printf(" "); for(i=1;i<2*Number;i++) { printf("HufmTree[%2d].parent=%3d ",i,tree[i].parent);//输出当前元素的parent值 printf("HufmTree[%2d].weight=%3d ",i,tree[i].weight);//输出当前元素的weight值 printf("HufmTree[%2d].lchild=%3d ",i,tree[i].lchild);//输出当前元素的lchild值 printf("HufmTree[%2d].rchild=%3d ",i,tree[i].rchild);//输出当前元素的rchild值 } }。
本文到此讲解完毕了,希望对大家有帮助。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
【哪些东西能镇宅辟邪】在中国传统文化中,人们常通过一些物品来镇宅辟邪,以求家庭平安、运势顺畅。这些物品...浏览全文>>
-
【哪些东西和绿豆汤一起煲比较好】绿豆汤是夏季常见的饮品,具有清热解毒、消暑降温的功效。在煲绿豆汤时,加...浏览全文>>
-
【哪些电视剧有蒋梦婕参演】蒋梦婕是中国内地女演员,因出演《红楼梦》中“林黛玉”一角而广受关注。她自出道...浏览全文>>
-
【哪些地方有西伯利亚狼】西伯利亚狼,又称亚洲灰狼或蒙古狼,是广泛分布于欧亚大陆的一种大型犬科动物。它们...浏览全文>>
-
【哪些地方适合旅游】旅游是人们放松身心、开阔眼界的重要方式。不同的人有不同的旅行偏好,有的喜欢自然风光...浏览全文>>
-
【哪些地方适合过年旅行】春节是中国最重要的传统节日,也是家人团聚、走亲访友的时刻。然而,随着生活节奏的...浏览全文>>
-
【哪个快递公司能寄宠物】随着人们生活水平的提高,越来越多的人开始饲养宠物。在一些特殊情况下,比如搬家、...浏览全文>>
-
【哪个酒店app最优惠】在如今的旅游市场中,选择一个合适的酒店预订平台,不仅能节省开支,还能提升入住体验。...浏览全文>>
-
【哪个季节桃花开花】桃花是一种常见的观赏植物,因其花色艳丽、花期短暂而深受人们喜爱。了解桃花的开花季节...浏览全文>>
-
【哪个季节去白洋淀好呢】白洋淀是中国北方著名的湿地景区,位于河北省保定市安新县,是“华北之肾”和“北国...浏览全文>>