none
有劳了,帮我看看下面程序怎么输出的?这是数据结构的哈夫曼树。 RRS feed

  • 问题

  • #include<stdio.h>
    
    int t,i,j,n,x1,x2,m1,m2,a;
    
    typedef struct Nodeh
    {
     int data,tag,lch,rch;
    }Nodeh;
    
    Nodeh r[20];
    
    int huffmah()
    {
     printf("请输入叶子结点的总数:");
     scanf("%d",&n);
     t=2*n-1;
     printf("请输入各叶子结点的值:\n");
     for(j=1;j<=n;j++)
     {
     scanf("%d",&r[j].data);
       r[j].tag=0;r[j].lch=0;r[j].rch=0;
     }
    
     i=0;
     while(i<n-1)
     {
     x1=0;m1=32767;
     x2=0;m2=32767;
     for(j=1;j<=n+i;j++)
     {
     if((r[j].data<m1)&&(r[j].tag==0))
     {
     m2=m1;x2=x1;
     m1=r[j].data;x1=j;
     }
     else if((r[j].data<m2)&&(r[j].tag==0))
     {
     m2=r[j].data;x2=j;
     }
     } 
     r[x1].tag=1;r[x2].tag=1;i++;
     r[n+i].data=r[x1].data+r[x2].data;
     r[n+i].tag=0;r[n+i].lch=x1;r[n+i].rch=x2;
     } 
     return t;
    }
    
    void inorder(int t)
    {
     Nodeh *p;
     p=&r[t];
     if(t!=0)
     {
     inorder(p->lch);
     printf("%6d",p->data);
     inorder(p->rch);
     }
    }
    
    void main()
    {
     do
     {
     printf("\n");
     printf(" 1 构建一棵哈夫曼树\n");
     printf(" 2 中根遍历输出哈夫曼树\n");
     printf(" 3 结束程序\n");
     printf(" 请输入你的选择:");
       scanf("%d",&a);
    
     switch(a)
     {
     case 1:huffmah();break;
     case 2:inorder(t);break;
     }
     }while(a==1||a==2);
    }
    
    我自己输入2,1,4,8。 它输出1 3 2 7 4 15 8
    我自己检验了下 为何人r[5]=3之后 回到for循环时又从一开始,怎么输出上面的数字的  
    哪位高手可以帮我讲一下 不尽感激


    2012年4月26日 14:18

答案

  • 单步调试一下

    观察数据变化

    稍加分析你就会理解了


    新浪微博http://weibo.com/xianglitian,欢迎围观

    • 已标记为答案 夕霖 2012年4月28日 17:21
    2012年4月27日 0:09

全部回复