要求:
设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。
写个程序输入列表,生成一棵 M 叉树,并由 M 叉树输出列表。假定输入无错误。
程序如下:
- #include"stdio.h"
- #include"stdlib.h"
- #define M 3
- typedef struct node
- {
- char val;
- struct node *subTree[M];
- }NODE;
- char buf[255],*str=buf;
- NODE *d=NULL;
- NODE *makeTree()
- {
- int k;
- NODE *s;
- s=(NODE*)malloc(sizeof(NODE));
- s->val=*str++;
- for(k=0;k<M;k++)
- s->subTree[k]=NULL;
- if(*str==' ( ')
- {
- k=0;
- do{
- str++;
- s->subTree[k]=makeTree();
- if(*str==')')
- {
- str++;
- break;
- }
- k++;
- }while(*str==',');
- }
- return s;
- }
- void walkTree(NODE *t)
- {
- int i;
- if(t!=NULL)
- {
- putchar(t->val);
- if(t->subTree[0]==NULL)return;
- putchar('(');
- for(i=0;i<M;i++)
- {
- walkTree(t->subTree[i]);
- if(i!=M-1&&t->subTree[i+1]!=NULL)
- putchar(',');
- }
- putchar(')');
- }
- }
- void main()
- {
- printf("Enter exp:");
- scanf("%S",str);
- d=makeTree();
- walkTree(d);
- putchar('/n');
- }
看是差不多了,可就是没法调试……??