数据结构实验之二叉树三:统计叶子数
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 a[101]; int l; struct node//二叉树的定义 { char data; struct node *lc; struct node *rc; }; struct node *creat() { struct node *root; char c; c = a[l++]; if(c == ',') { return NULL; } else { root = (struct node *)malloc(sizeof(struct node)); root->data = c; root->lc = creat(); root->rc = creat(); } return root; } int leave(struct node *root) { if(root == NULL) { return 0; } if(root->lc == NULL && root->rc == NULL) { return 1; } else return leave(root->lc) + leave(root->rc); } int main() { int i, j, n, m, k, t; struct node *root; while(scanf("%s", a) != EOF) { l = 0; root = (struct node *)malloc(sizeof(struct node)); root =creat(); k = leave(root); printf("%d\n", k); } return 0; }