数据结构实验之二叉树三:统计叶子数
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。
Example Input
abc,,de,g,,f,,,
Example Output
3
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *Left,*Right;
}BiTNode,*BiTree;
string s;
int cnt;
void CreateBiTree(BiTree &T)
{
char c = s[++cnt];
if(c ==',') T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = c;
CreateBiTree(T->Left);
CreateBiTree(T->Right);
}
}
int visit(BiTree T)
{
if(T==NULL) return 0;
if(T->Right==NULL&&T->Left==NULL) return 1;
return visit(T->Left) + visit(T->Right);
}
int main()
{
BiTree T;
int ans;
while(cin >> s)
{
cnt = -1;
CreateBiTree(T);
ans = visit(T);
cout << ans << endl;
}
return 0;
}