鱼生富贵 2022-05-07 19:16 采纳率: 97.4%
浏览 70
已结题

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


#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

  • 写回答

2条回答 默认 最新

  • Code_流苏 C/C++领域优质创作者 2022-05-07 21:39
    关注

    代码改正如下:

    #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;
    }
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月7日

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化