鱼生富贵 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 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测