已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。 Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。 Output
输出二叉树的叶子结点个数。 Example Input
abc,,de,g,,f,,, Example Output
3 Hint
Author
xam
#include<stdio.h>#include<stdlib.h>#include<string.h>char a[55];int top;struct node{ int data; struct node *l, *r;};struct node *creat()//重建二叉树{ struct node *root; top++; if(a[top] == ',') root = NULL; else { root = (struct node *) malloc (sizeof(struct node)); root -> data = a[top]; root -> l = creat(); root -> r = creat(); } return root;};int yezi(struct node *root){ if(root == NULL) return 0; if(root -> l == NULL && root -> r == NULL) return 1; else return yezi(root -> l) + yezi(root -> r);//递归把左子树的叶子数跟右子树的叶子数加起来}int main(){ while(scanf("%s", a) != EOF) { top = -1; struct node *root; root = creat(); printf("%d/n", yezi(root)); } return 0;}新闻热点
疑难解答