快整死了,一直出错,为什么输不出结果,
char** coding(H_tree *t,int n,int i,stack *s)//t为霍夫曼树,n为符号,i为当前节点,s为存放编码的栈{
int j; char **HC;//hc存放编码
HC=(char**)malloc(n*sizeof(char*));
if(t)
{
if(t->node[i].lchild==-1&&t->node[i].rchild==-1)
{
HC[i]= (char*)malloc(sizeof(char)*(s->top+1));
for(j=0;j<s->top;j++)
{
HC[i][j]=s->base[j];
}
HC[i][s->top]='\0';
for(j=0;j<=s->top;j++)
{
printf(" =%c ",HC[i][j]);
}
printf("\n");
}//如果为叶子节点,这输出此符号说在叶子节点的编码;
else
{
push(s,'0');
coding(t,n,t->node[i].lchild,s);//采用递归的方式对叶子节点的符号进行编码叶子节点为1,其他节点为零
pop(s);//由于根节点是进栈一个字符所以要弹出一个字符
push(s,'1');//右子树的叶子节点字符为1;
coding(t,n,t->node[i].rchild,s);
pop(s);
}
}
return HC;
}
void main()
{
int i,j, w[8]={5,29,7,8,14,23,3,11}; H_tree t ,*q; stack s; char**HC;
q=creat_Huffman_tree(&t,8,w);
init_stack(&s);
HC=coding(&t,8,t.root,&s);
for(i=0;i<N;i++)——————从此处出错
{
printf(" %s \n ",HC[i]);
}
_____ ______ _______ _________ _________
换一种输入 还是不行
for(i=0;i<n;i++)
for(j=0;;j++)
{
if(*(*(HC+i)+j)=='\0') break;
else printf("%c",*(*(HC+i)+j));
}
}