| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 613 人关注过本帖
标题:简单的二叉树建立和遍历,为什么没有输出
只看楼主 加入收藏
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
结帖率:87.5%
收藏
已结贴  问题点数:10 回复次数:6 
简单的二叉树建立和遍历,为什么没有输出
#include<stdio.h>
#include<stdlib.h>

typedef struct BiTree{

    char data;
    struct BiTree *lchild;
    struct BiTree *rchild;
}BiTrNode;

void CreateBiTree(BiTrNode *T);
void TraverstBiTree(BiTrNode *T);

int main()
{
    BiTrNode *T = NULL;
    CreateBiTree(T);
    TraverstBiTree(T);   

    return 0;

}

void CreateBiTree(BiTrNode *T)
{
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
        T = NULL;   
    }   
    else
    {
        T = (BiTrNode *)malloc(sizeof(BiTrNode));
        T->data = c;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }

}

void TraverstBiTree(BiTrNode *T)
{
    if( T )
    {
        printf("%c\n",T->data);
        TraverstBiTree(T->lchild);
        TraverstBiTree(T->rchild);
    }

}


为什么输入之后,不打印值
搜索更多相关主题的帖子: include return 二叉树 
2014-11-13 22:01
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
因为T的值压根就没有返回。 CreateBiTree这里应该使用二级指针。

重剑无锋,大巧不工
2014-11-13 22:06
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
收藏
得分:0 
回复 2 楼 beyondyf
也就是说传递给函数的T只是一个拷贝,函数对这个拷贝的T的操作,在main中是无效的,对吗?
2014-11-13 22:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 

重剑无锋,大巧不工
2014-11-13 22:35
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
收藏
得分:0 
回复 2 楼 beyondyf
#include<stdio.h>
#include<stdlib.h>

typedef struct BiTree{

    char data;
    struct BiTree *lchild;
    struct BiTree *rchild;
}*BiTrNode;

void CreateBiTree(BiTrNode *T);
void TraverstBiTree(BiTrNode *T);

int main()
{
    BiTree *T = NULL;
    CreateBiTree(&T);
    TraverstBiTree(&T);   

    return 0;

}

void CreateBiTree(BiTrNode *T)
{
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
        *T = NULL;   
    }   
    else
    {
        *T = (BiTrNode)malloc(sizeof(BiTrNode));
        (*T)->data = c;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }

}

void TraverstBiTree(BiTrNode *T)
{
    if( T )
    {
        printf("%c\n",(*T)->data);
        TraverstBiTree(&(*T)->lchild);
        TraverstBiTree(&(*T)->rchild);
    }

}


改成了这样还是不对
2014-11-13 22:35
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
尽量保持了你代码的原貌,自己对比一下我改了哪些地方。还有你的代码中缺释放结点的模块,尽快补齐。

今晚就到这里,该休息了。

程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct BiTree{

    char data;
    struct BiTree *lchild;
    struct BiTree *rchild;
}*BiTrNode;

void CreateBiTree(BiTrNode *T);
void TraverstBiTree(BiTrNode T);

int main()
{
    BiTrNode T = NULL;
    CreateBiTree(&T);
    TraverstBiTree(T);    

    return 0;

} 

void CreateBiTree(BiTrNode *T)
{
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
        *T = NULL;    
    }    
    else
    {
        *T = (BiTrNode)malloc(sizeof(struct BiTree));
        (*T)->data = c;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }

}

void TraverstBiTree(BiTrNode T)
{
    if( T )
    {
        printf("%c\n", T->data);
        TraverstBiTree(T->lchild);
        TraverstBiTree(T->rchild);
    }

}

重剑无锋,大巧不工
2014-11-13 22:51
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
收藏
得分:0 
回复 6 楼 beyondyf
谢谢!
2014-11-13 23:28
快速回复:简单的二叉树建立和遍历,为什么没有输出
数据加载中...
 
   



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

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