算法分析之递归

 要求:

M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。

 

               

写个程序输入列表,生成一棵 M 叉树,并由 M 叉树输出列表。假定输入无错误。

程序如下:

  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. #define M 3
  4. typedef struct node
  5. {
  6.     char val;
  7.     struct node *subTree[M];
  8. }NODE;
  9. char buf[255],*str=buf;
  10. NODE *d=NULL;
  11. NODE *makeTree()
  12. {
  13.     int k;
  14.     NODE *s;
  15.     s=(NODE*)malloc(sizeof(NODE));
  16.     s->val=*str++;
  17.     for(k=0;k<M;k++)
  18.       s->subTree[k]=NULL;
  19.     if(*str==' ( ')
  20.         {
  21.             k=0;
  22.             do{
  23.                 str++;
  24.                 s->subTree[k]=makeTree();
  25.                 if(*str==')')
  26.                 {
  27.                     str++;
  28.                     break;
  29.                 }
  30.                 k++;
  31.             }while(*str==',');
  32.         }
  33.     return s;
  34. }
  35. void walkTree(NODE *t)
  36. {
  37.     int i;
  38.     if(t!=NULL)
  39.     {
  40.         putchar(t->val);
  41.         if(t->subTree[0]==NULL)return;
  42.         putchar('(');
  43.         for(i=0;i<M;i++)
  44.         {
  45.             walkTree(t->subTree[i]);
  46.             if(i!=M-1&&t->subTree[i+1]!=NULL)
  47.                 putchar(',');
  48.         }
  49.         putchar(')');
  50.     }
  51. }
  52. void main()
  53. {
  54.     printf("Enter exp:");
  55.     scanf("%S",str);
  56.     d=makeTree();
  57.     walkTree(d);
  58.     putchar('/n');
  59. }

看是差不多了,可就是没法调试……??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值