数据结构实验之二叉树三:统计叶子数
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。
Sample Input
abc,,de,g,,f,,,
Sample Output
3
Hint
Source
xam
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char pre[55];
int l;
struct node
{
char data;
struct node *left;
struct node *right;
};
struct node *creat()
{
struct node *root;
char p;
p = pre[l++];
if(p == ',')
return NULL;
else
{
root = (struct node *)malloc(sizeof(struct node));
root -> data = p;
root -> left = creat();
root -> right = creat();
}
return root;
};
int leave(struct node *root)
{
if(root == NULL) //当节点为空时,需要return 0
return 0;
if(root -> left == NULL && root -> right == NULL) // 当为叶子节点时,返回1
return 1;
else // 其他情况都需要返回左叶子和右叶子之和
return leave(root -> left) + leave(root -> right);
}
int main()
{
int n;
while(~scanf("%s", pre))
{
l = 0;
struct node *root;
root = (struct node *)malloc(sizeof(struct node));
root = creat();
n = leave(root);
printf("%d\n", n);
}
return 0;
}