首页 > 代码库 > 将哈夫曼树转化成二叉树
将哈夫曼树转化成二叉树
今晚感觉好爽啊,好久好久没有这种感觉,起床需要点爆发力,做事还需要点动力,给自己都没有下过这么大的决心写代码,帮她却写的很好,我自己都吃惊了。哈哈哈。。。今晚也是帮她写好西邮导航睡不着,那就敲了一下哈夫曼树转化成二叉树的代码,其实理解了真的不难,我定义F为一个二级指针,用它指向结点的地址,创建很简单,输入数据data和权值weight,再把它的左右置为NULL;
初始化话完了,就开始创建二叉树吧,我定义两个变量s1和s2,s1永远标记的是F这个指针数组中节点权值最小的一个,s2则为次小,特别注意,s1和s2我每次初始化的时候都是放在F[i]!=NULL的结点上,这里用到了我前几次用的方法,利用for空语句循环找到s1和s2,对于如何让找出s1最小s2次小我已经说过了,就再次不用说了;
这里面的关键几步应该是如何把二叉树建立起来,假如说我已经找到小小s1和次小s2了,下面用图好解释:
创建出来就是这个样子了,经过一次创建成为下面这个样子,
循环n-1次之后二叉树就创建成功了,直接进入代码;
#include <iostream> #include<stdlib.h> #include<conio.h> #define null NULL typedef struct HuffNode{ char data; int weight; struct HuffNode *left,*right; }HuffNode; HuffNode *CreateHuffman(HuffNode **,int ); void preorder(HuffNode * ); void leafprint(HuffNode *); void Print(HuffNode *); HuffNode *CreateHuffman(HuffNode **F,int n){ HuffNode *p; int i,j; int k1=0,k2=1; for(i=0;i<n-1;i++) { for(k1=0;k1<n&&F[k1]==null;k1++); // printf("数据%c,权值%d\n",F[k1]->data,F[k1]->weight); for(k2=k1+1;k2<n&&F[k2]==null;k2++); // printf("数据%c,权值%d\n",F[k2]->data,F[k2]->weight); for(j=k2;j<n;j++) { if(F[j]) { if(F[j]->weight<F[k1]->weight) { k2=k1; k1=j; } else if(F[j]->weight<F[k2]->weight&&F[k2]) { k2=j; } } } printf("输出最小k1=%d k2=%d\n",k1,k2); p=(HuffNode *)malloc(sizeof(HuffNode)); p->weight=F[k1]->weight+F[k2]->weight; p->data=http://www.mamicode.com/'w';>
对于如何遍历二叉树先序,中序,后序都可以,随意运行结果
将哈夫曼树转化成二叉树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。