數(shù)據(jù)結(jié)構(gòu)實驗之二叉樹三:統(tǒng)計葉子數(shù)
TimeLimit: 1000MS Memory Limit: 65536KB
SubmitStatistic
已知二叉樹的一個按先序遍歷輸入的字符序列,如abc,,de,g,,f,,, (其中,表示空結(jié)點)。請建立二叉樹并求二叉樹的葉子結(jié)點個數(shù)。
Input
連續(xù)輸入多組數(shù)據(jù),每組數(shù)據(jù)輸入一個長度小于50個字符的字符串。
Output
輸出二叉樹的葉子結(jié)點個數(shù)。
Example Input
abc,,de,g,,f,,,
Example Output
3
Hint
Author
xam
#include<string.h>#include<stdio.h>#include<stdlib.h>typedef struct node{   int data;   struct node*l;   struct node*r;}tree;tree *creat(char *&ss){   if(*ss==',')   {   ss++;   return NULL;   }  tree*p;  p = (tree*)malloc(sizeof(tree));  p->data = *ss++;  p->l = creat(ss);  p->r = creat(ss);  return p;}void lastout(tree*p){   if(p)   {       lastout(p->l);       lastout(p->r);       printf("%c",p->data);   }}void inout (tree*p){   if(p)   {     inout(p->l);     printf("%c",p->data);     inout(p->r);   }}int num;void sumyz(tree*p){   if(p)   {     if(p->l==NULL&&p->r==NULL)     {        num++;     }     sumyz(p->l);     sumyz(p->r);   }}int main(){   char ss[51],*p;   while(~scanf("%s",ss))   {      p = ss;      tree*root;      root = creat(p);      /*inout(root);      printf("/n");      lastout(root);      printf("/n");*/      num = 0;      sumyz(root);      printf("%d/n",num);   }}/***************************************************User name: jk160505徐紅博Result: AcceptedTake time: 0msTake Memory: 108KBSubmit time: 2017-02-07 11:10:03****************************************************/ 
 
  | 
新聞熱點
疑難解答