数据结构实验之二叉树三:统计叶子数
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
输入
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
输出
输出二叉树的叶子结点个数。
示例输入
abc,,de,g,,f,,,
示例输出
3
提示
来源
xam
示例程序
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXQSIZE 100
typedef int Status;
typedef char TElemType;
TElemType ch[51];
Status i,count;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
typedef BiTree QElemType;
void CreateBiTree(BiTree *T)
{
i++;
if(ch[i]==',')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
if(!*T)
exit(OVERFLOW);
(*T)->data=ch[i];
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
Status visitT(TElemType e)
{
return OK;
}
Status zhongxu(BiTree T,Status(*Visit)(TElemType))
{
if(T)
{
if(!T->lchild&&!T->rchild)count++;
if(zhongxu(T->lchild,Visit))
if(Visit(T->data))
if(zhongxu(T->rchild,Visit))return OK;
return ERROR;
}
else return OK;
}
int main()
{
while(scanf("%s",ch)!=EOF)
{
BiTree T;
i=-1;
count=0;
CreateBiTree(&T);
zhongxu(T,visitT);
printf("%d\n",count);
}
return 0;
}