Huffman树的建立
程序代码:
#include <stdio.h> #include <malloc.h> #define N 10 #define n 5 int i; struct node { char leaves; int weight; int lch; int rch; int parent; } creat() { struct node tree[N]; int j; int MAX=1000; int min1,min2,min11,min22; for(i=0;i<(2*n-1);i++) { tree[i].parent=-1; tree[i].lch=-1; tree[i].rch=-1; printf("%d",i); } printf("%d",i); for(i=0;i<n;i++) { printf("请输入叶结点及权值:"); scanf("%c %d",&tree[i].leaves,&tree[i].weight); } for(i=n;i<2*n-1;i++) //n个叶节点进行n-1次合并 { min1=min2=MAX; min11=min22=0; for(j=0;j<n;j++) { if(tree[j].parent==-1) //检查未合并的结点 { if(tree[j].weight<min1) { min22=min11; min11=j; min2=min1; min1=tree[j].weight; } else if(tree[j].weight<min2) { min22=j; min2=tree[j].weight; } } } tree[min11].parent=i; //当前合并结点1的父结点为新节点 tree[min22].parent=i; //当前合并结点2的父结点为新节点 tree[i].weight=tree[min11].weight+tree[min22].weight; //新结点的权值 tree[i].lch=min11; tree[i].rch=min22; continue; } tree[2*n-2].parent=-1; //令最后一个结点的parent为-1 } main() { struct node tree[N]; int j,k,t,pr,s; int code[n][n]; creat(); for(i=0;i<n;i++) { t=i; //t记录当前结点位置 k=n-2; //j表示当前结点所在层次 while(tree[t].parent!=-1) //当前结点不是根结点时 { pr=tree[t].parent; if(t==tree[pr].lch) code[i][k]=0; //左子树记为0 else code[i][k]=1; //右子树记为1 k=k-1; t=pr; } code[i][n-1]=k+1; //记录编码起始位置 } printf("\nhuffman编码为:"); for(i=0;i<n;i++) { s=code[i][n-1]; for(;s<n-1;s++) { printf("%c",tree[i].leaves); printf("%d",code[i][s]); } printf("\n"); } }
请问这个建立huffman树的程序是哪里出错了
在输入结点时那个循环也不正常 会出现
这样的情况
然后下面运行出错