请问可以帮我看下下面这串代码有什么错误吗?
我输入1 2 3 4 5
但是运行不出结果,像是陷入递归出不来了一样
#include <stdio.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void BuildBiTree(BiTree T)
{
char ch;
scanf("%c",&ch);
if(ch=='\n')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
BuildBiTree(T->lchild);
BuildBiTree(T->rchild);
}
}
//统计二叉树的叶子结点个数
/*int LeafNumber(BiTree T)
{
static int count=0;
BiTNode *p=T;
if(!p->lchild&&!p->rchild)
count++;
LeafNumber(p->lchild);
LeafNumber(p->rchild);
return count;
}*/
int LeafNumber(BiTree T)
{
if (T == NULL)
return 0;
else if (!T->lchild && !T->rchild)
return 1;
else
return LeafNumber(T->lchild) + LeafNumber(T->rchild);
}
int main()
{
BiTree T;
T=(BiTree)malloc(sizeof(BiTNode));
T->data='\0';
T->lchild=NULL;
T->rchild=NULL;
BuildBiTree(T);
printf("%d",LeafNumber(T));
return 0;
}
11到13行不建议这样写,你这么写会把空格和回车作为有效输入,所以输入1 2 3 4 5相当于:
1 空格 2 空格 3 空格 4 空格 5 '\n'
‘\n’同时是作为占位符,表示该结点的父节点没有相应的子树,所以输入1 2 3 4 5之后还需要输入9个‘\n’才能把树建完。建议用其他字符作为占位符,比如‘#’。另外可以参考以下代码:
你是咋输入的,我的还是能运行的