统计二叉树中叶子结点个数


#include <stdio.h>
#include<stdlib.h>

typedef struct BiTNode
{
    int data;
    struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;

void BuildBiTree(BiTree T)
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        T=NULL;
    else
    {
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=ch;
        BuildBiTree(T->lchild);
        BuildBiTree(T->rchild);
    }
}

//统计二叉树的叶子结点个数
/*int LeafNumber(BiTree T)
{
    static int count=0;
    if(!T->lchild&&!T->rchild)
        count++;
    count+=LeafNumber(T->lchild);
    count+=LeafNumber(T->rchild);
    return count;
}*/

int LeafNumber(BiTree T)
{
    if (T == NULL)
        return 0;
    else if (T->lchild==NULL && T->rchild==NULL)
        return 1;
    else
        return LeafNumber(T->lchild) + LeafNumber(T->rchild);
}

int main()
{
    BiTree T;
    T = (BiTree)malloc(sizeof(BiTNode));
    T->data = '\0';
    T->lchild = NULL;
    T->rchild = NULL;
    BuildBiTree(T);
    printf("%d", LeafNumber(T));
    return 0;
}

百思不得其解,为什么就是不对呢,无论怎么输结果都是1

代码改正如下:

#include <stdio.h>
#include<stdlib.h>

typedef struct BiTNode
{
    char data;
    struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;

int BuildBiTree(BiTree *T)
{
    char ch;
    scanf_s("%c", &ch);
    if (ch == '#')
        *T = NULL;
    else
    {
        *T = (BiTNode*)malloc(sizeof(BiTNode));
        (*T)->data = ch;
        BuildBiTree(&(*T)->lchild);
        BuildBiTree(&(*T)->rchild);
    }
    return 1;
}


//统计二叉树的叶子结点个数
int LeafNumber(BiTree T)
{
       if(T==NULL)
       {
            return 0;
       }
       else
       {
           if( (LeafNumber(T->lchild)==NULL)&&(LeafNumber(T->rchild)==NULL) ){
               return 1; 
           }
           else return LeafNumber(T->lchild) + LeafNumber(T->rchild);
       }
}

int main()
{
    BiTree T;
    if( BuildBiTree(&T) )
    {
        printf("%d", LeafNumber(T));
    }
    printf("\n");
    return 0;
}

可以的话,帮忙点个采纳!

你这代码有问题啊,怎么终止输入,没有判断条件啊