Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。
Example Input
abc,,de,g,,f,,,
Example Output
3
解题感触
调试这道题花费了很长时间,程序运行错误。主要原因是输入数据有多组,i没有置零,另外,程序终止原因待定。。。。。
代码
#include <stdio.h>
#include <stdlib.h>
char str[51];
int i;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
BiTree creatBiTree(BiTree T)
{
char temp=str[i++];
if(temp==',')
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=temp;
T->lchild=creatBiTree(T->lchild);
T->rchild=creatBiTree(T->rchild);
}
return T;
}
int LeaveCount(BiTree T)
{
if(T==NULL)
return 0;
if(T->lchild==NULL&&T->rchild==NULL)
{
return 1;
}else
return LeaveCount(T->lchild)+LeaveCount(T->rchild);
}
int main()
{
while(~scanf("%s",str))
{
i=0;//修改处
BiTree T;
T=creatBiTree(T);
printf("%d\n",LeaveCount(T));
}
return 0;
}