| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2009 人关注过本帖
标题:麻烦大神们帮我看看我的代码为什么遍历时输出不了
只看楼主 加入收藏
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:4 
麻烦大神们帮我看看我的代码为什么遍历时输出不了
//二叉链树的实现
#include <stdio.h>
#include <stdlib.h>

typedef struct Bitnode
{
    int data;
    struct Bitnode *lchild;
    struct Bitnode *rchild;
}Binode,*Bitree;

Bitree createbitree(Bitree T)   //创建树
{
    int ch;
    scanf("%d",&ch);
    printf("已输入\n");
    if(ch==0)
        return T;
    else
    {  
        T=(Bitree)malloc(sizeof(struct Bitnode));
        T->data=ch;  
        T->lchild=createbitree(T->lchild);
        T->rchild=createbitree(T->rchild);
    }
    return T;
}

void visit(int e)
{
    printf("%d\t",e);
}
//先序遍历二叉链树
void preorder(Bitree T)   
{
    if(T)
    {
        exit(0);
    }
    else
    {
        visit(T->data);
        preorder(T->lchild);
        preorder(T->rchild);
    }
}

int main()
 {
     Bitree T;
     T=createbitree(T);
     preorder(T);
     return 0;
 }
搜索更多相关主题的帖子: include return 
2016-11-22 20:31
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
程序代码:
//先序遍历二叉链树
void preorder(Bitree T)  

{
    if(T)//等价于if(T!=NULL)    T不为NULL的时候exit(0),T==NULL的时候反而要输出T->data并递归访问子节点。。。该怎么改,楼主自己想吧
    {
        exit(0);
    }
另外createbitree()函数本身就是错的。。。楼主一直在使用未初始化的元素
比如 if(ch==0)return T;请问楼主为什么不是return NULL;而是return T.T的值在那个时候还是未初始化的呢!
程序代码:
Bitree createbitree()   //参考代码 ,  createbitree函数不需要参数。
{
    int ch;
    scanf("%d",&ch);
    printf("已输入\n");
    if(ch==0)
        return NULL;
    else
    { 

        Bitree T=(Bitree)malloc(sizeof(struct Bitnode));
        T->data=ch; 

        T->lchild=createbitree(T->lchild);
        T->rchild=createbitree(T->rchild);
          return T;
    }
}







φ(゜▽゜*)♪
2016-11-22 20:55
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
收藏
得分:0 
回复 2楼 书生牛犊
好的,谢谢大神。不过为什么createbitree()不需要参数,递归调用createbitree(t->lchild)都要参数的。
2016-11-23 16:57
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 
回复 3楼 凌灬轻扬
因为C语言传参的规则是只传值,所以createbitree(T)里的T已经不是main中的那个T了,仅仅是复制了main中T所保存的值。而你写的main中的T那个时候还未初始化,T的值还是随机的,对createbitree函数来说也不需要,所以根本起不到作用,索性就不用了。

程序代码:
void fun(int a){a=1;printf("fun=%d,",a);}
void fun1(int*a){*a=2;printf("fun1=%d",*a);}
int main(){/*写两个函数给你看看,fun()和fun1()一个可以修改main中的a的值,一个不能。*/
int a=0;
fun(a);
printf("main=%d",a);
fun1(&a);//传指针可能是唯一可以用于修改穿进函数的参数的方法了吧。。如果你还没学到这一章,看不懂就算了。
printf("main=%d",a);
}




φ(゜▽゜*)♪
2016-11-24 09:42
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:3 
回复 4楼 书生牛犊
3楼的意思应该是:你定义函数原型时没有参数,你调用时又带了参数,这可以吗?
我也觉得这可能是你疏忽了。除非createbitree函数是重载函数,否则定义时Bitree createbitree() ,而递归调用时 T->lchild=createbitree(T->lchild);这肯定编译通不过。
2016-11-24 09:52
快速回复:麻烦大神们帮我看看我的代码为什么遍历时输出不了
数据加载中...
 
   



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

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