一点小问题
这二叉树的输入部分 什么地方有问题?
- 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;}