Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。
Sample
Input
abc,de,g,f,
Output
3
Hint
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node *l, *r;
} Tree;
char pre[55];
int cnt, leaves;
Tree* creat()
{
Tree* root;
if(pre[cnt] == ',')
{
cnt++;
root = NULL;
}
else
{
root = new Tree;
root->data = pre[cnt++];
root->l = creat();
root->r = creat();
}
return root;
}
void count_leaves(Tree *root)
{
if(root)
{
if(!root->l && !root->r)
{
leaves++;
}
count_leaves(root->l);
count_leaves(root->r);
}
}
int main()
{
while(~scanf("%s", pre))
{
cnt = 0;
leaves = 0;
Tree *root = creat();
count_leaves(root);
printf("%d\n", leaves);
}
return 0;
}