您的位置:首页 > 其它

算法分析之递归

2008-09-14 20:11 155 查看
 要求:
设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。
 
                <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
写个程序输入列表,生成一棵 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');

}

看是差不多了,可就是没法调试……??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 null c