| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10555 人关注过本帖
标题:统计二叉树中叶子结点个数的问题,
取消只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:5 
统计二叉树中叶子结点个数的问题,
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int data;
    struct Node *LChild;
    struct Node *RChild;
}BiTNode,*BiTree;

int Leaf_Count;

//先序遍历创建二叉树
void CreateBiTree(BiTree *bt)
{
    int ch;
    scanf("%d",&ch);
    if(ch==0)
        *bt=NULL;
    else
    {
        *bt=(BiTree)malloc(sizeof(BiTree));
        (*bt)->data=ch;
        CreateBiTree(&((*bt)->LChild));
        CreateBiTree(&((*bt)->RChild));
    }
}
//先序打印二叉树
void PreOrder(BiTree bt)
{
    if(bt)
    {
        printf("%d ",bt->data);
        PreOrder(bt->LChild);
        PreOrder(bt->RChild);
    }
}
//中序打印二叉树
void InOrder(BiTree bt)
{
    if(bt)
    {
        InOrder(bt->LChild);
        printf("%d ",bt->data);
        InOrder(bt->RChild);
    }
}
//后序打印二叉树
void PostOrder(BiTree bt)
{
    if(bt)
    {
        PostOrder(bt->LChild);
        PostOrder(bt->RChild);
        printf("%d ",bt->data);
    }
}
//先序输出二叉树的叶子结点
void Pre_Order(BiTree bt)
{
    if(bt)
    {
        if(bt->LChild==NULL&&bt->RChild==NULL)
            printf("%d ",bt->data);
        Pre_Order(bt->LChild);
        Pre_Order(bt->RChild);
    }
}
//输出叶子结点数目
void LeafCount(BiTree bt)
{
    if(bt)
    {
        LeafCount(bt->LChild);
        LeafCount(bt->RChild);
        if(bt->LChild==NULL&&bt->RChild==NULL)
            Leaf_Count++;
    }
}
//输出叶子结点数目
int Leaf(BiTree bt)
{
    int Leaf_Count;
    if(bt==NULL)
        Leaf_Count=0;
    else if(bt->LChild==NULL&&bt->RChild==NULL)
        Leaf_Count=1;
    else
        return Leaf(bt->LChild)+Leaf(bt->RChild);
}
int main()
{
    BiTree bt;
    int Leaf_Count=0;
    printf("先序序创建二叉树输入零结束输入\n");
    CreateBiTree(&bt);
   
    printf("先序打印二叉树\n");
    PreOrder(bt);
    printf("\n");

    printf("中序打印二叉树\n");
    InOrder(bt);
    printf("\n");

    printf("中序打印二叉树\n");
    PostOrder(bt);
    printf("\n");
   
    printf("输出二叉树中的叶子结点\n");
    Pre_Order(bt);
    printf("\n");
   
    printf("后序遍历输出叶子结点数目1.\n");
    Leaf_Count=0;
    LeafCount(bt);
    printf("%d",Leaf_Count);
    printf("\n");
   
    printf("后序遍历输出叶子结点数目2.\n");
    int num=Leaf(bt);
    printf("%d",num);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


为什么会是零,我调试的时候看的也不是0输出就为零了。

[此贴子已经被作者于2017-11-19 14:41编辑过]

搜索更多相关主题的帖子: 二叉树 子结点 int NULL printf 
2017-11-19 14:33
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 九转星河
int Leaf(BiTree bt)
{
    int Leaf__Count;
    if(bt==NULL)
        Leaf__Count=0;
    else if(bt->LChild==NULL&&bt->RChild==NULL)
        Leaf__Count=1;
    else
        return Leaf(bt->LChild)+Leaf(bt->RChild);
}

局部变量名称该过也不行
2017-11-19 16:42
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int data;
    struct Node *LChild;
    struct Node *RChild;
}BiTNode,*BiTree;

int Leaf_Count=0;                                //******

//先序遍历创建二叉树
void CreateBiTree(BiTree *bt)
{
    int ch;
    scanf("%d",&ch);
    if(ch==0)
        *bt=NULL;
    else
    {
        *bt=(BiTree)malloc(sizeof(BiTree));
        (*bt)->data=ch;
        CreateBiTree(&((*bt)->LChild));
        CreateBiTree(&((*bt)->RChild));
    }
}
//先序打印二叉树
void PreOrder(BiTree bt)
{
    if(bt)
    {
        printf("%d ",bt->data);
        PreOrder(bt->LChild);
        PreOrder(bt->RChild);
    }
}
//中序打印二叉树
void InOrder(BiTree bt)
{
    if(bt)
    {
        InOrder(bt->LChild);
        printf("%d ",bt->data);
        InOrder(bt->RChild);
    }
}
//后序打印二叉树
void PostOrder(BiTree bt)
{
    if(bt)
    {
        PostOrder(bt->LChild);
        PostOrder(bt->RChild);
        printf("%d ",bt->data);
    }
}
//先序输出二叉树的叶子结点
void Pre_Order(BiTree bt)
{
    if(bt)
    {
        if(bt->LChild==NULL&&bt->RChild==NULL)
            printf("%d ",bt->data);
        Pre_Order(bt->LChild);
        Pre_Order(bt->RChild);
    }
}
//输出叶子结点数目
void LeafCount(BiTree bt)
{
    if(bt)
    {
        LeafCount(bt->LChild);
        LeafCount(bt->RChild);
        if(bt->LChild==NULL&&bt->RChild==NULL)
            Leaf_Count++;
    }
}
//输出叶子结点数目
int Leaf(BiTree bt)
{
    int Leaf_Count;
    if(bt==NULL)
        Leaf_Count=0;
    else if(bt->LChild==NULL&&bt->RChild==NULL)
        Leaf_Count=1;
    else
        return Leaf(bt->LChild)+Leaf(bt->RChild);
}
int main()
{
    BiTree bt;
    int Leaf_Count=0;
    printf("先序序创建二叉树输入零结束输入\n");
    CreateBiTree(&bt);
   
    printf("先序打印二叉树\n");
    PreOrder(bt);
    printf("\n");

    printf("中序打印二叉树\n");
    InOrder(bt);
    printf("\n");

    printf("中序打印二叉树\n");
    PostOrder(bt);
    printf("\n");
   
    printf("输出二叉树中的叶子结点\n");
    Pre_Order(bt);
    printf("\n");
   
    printf("后序遍历输出叶子结点数目1.\n");
    //Leaf_Count=0;                                                //*******
    LeafCount(bt);
    printf("%d",Leaf_Count);
    printf("\n");
   
    printf("后序遍历输出叶子结点数目2.\n");
    int num=Leaf(bt);
    printf("%d",num);
    return 0;
}
这样吗?
2017-11-19 17:40
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 6楼 九转星河
图片附件: 游客没有浏览图片的权限,请 登录注册
我的为什么不可以啊。
2017-11-19 18:35
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
int Leaf(BiTree bt)
{
    int Leaf_Count;
    if (bt == NULL)
        Leaf_Count = 0;
    else if (bt->LChild == NULL&&bt->RChild == NULL)
        Leaf_Count = 1;
    else
        return Leaf(bt->LChild) + Leaf(bt->RChild);
}

int num = Leaf(bt);  
自定义函数Leaf() return来return去最后返回的是什么? 你仔细想想

我感觉返回的是叶子节点的数目。
2017-11-19 20:39
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 10楼 炎天
恩 好的 谢谢你   我刚查了如果局部变量与全局变量同名要使用全局变量的话在变量名前加::也是可以的。
2017-11-19 21:10
快速回复:统计二叉树中叶子结点个数的问题,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018036 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved