读书人

一点小疑点

发布时间: 2012-02-08 19:52:21 作者: rapoo

一点小问题
这二叉树的输入部分 什么地方有问题?

C/C++ code
 

#include "stdafx.h"
#include <stdlib.h>

typedef struct node
{
struct node *lchild;
struct node *rchild;
char data;
}bitree;
typedef bitree *tree;

void buildtree(tree *head,char *a,int i)
{
if(i <13)
{
if(a[i]=='#')
{
(*head)=NULL;
}
else
{
(*head)=(bitree*)malloc(sizeof(bitree));
(*head)->data=a[i];
buildtree(&(*head)->lchild,&(*a),i+1);
buildtree(&(*head)->rchild,&(*a),i+1);
}
}
}

void output(tree head)
{
if(head)
{
printf("%c",head->data);
output(head->lchild);
output(head->rchild);
}
}

int main()
{
tree head=NULL;
int i=0;
char a[13]={'A','B','#','C','D','#','#','#','E','#','F','#','#'};
buildtree(&head,a,i);
output(head);
}



[解决办法]
你说的对,这个确实有点麻烦
我觉得有两种办法,一个是修改你之前的代码,让i变成指针,它可以下一个要分析的字符;另一个是在3楼基础上修改,让buildtree返回即将分析的字符串。
C/C++ code
char* buildtree(tree *head,char *a){    if(*a=='#')    {        (*head)=NULL;        a ++;    }    else    {        (*head)=(bitree*)malloc(sizeof(bitree));        (*head)->data=*a;        a ++;        a=buildtree(&(*head)->lchild,a);        a=buildtree(&(*head)->rchild,a);                }    return a;} 

读书人网 >C语言

热点推荐