总有一天你的谜底会解开 2021-03-28 08:26 采纳率: 77.4%
浏览 26
已采纳

c语言二叉树的创建与遍历,求大佬帮我看看错在哪

#include"stdio.h"
#include"stdlib.h"
struct A
{
    struct A *left;
    struct A *right;    
    char data;
}*root;
struct A* creat(struct A*);
void xbianli(struct A*);
void zbianli(struct A*);
void hbianli(struct A*);
int main()
{
    root=creat(root);
    xbianli(root);
    zbianli(root);
    hbianli(root);

struct A* creat(struct A*x)
{
    char c;
    c=getchar();
    if(c!='*')
    {
        x=(struct A*)malloc(sizeof(struct A));
        x->data=c;
        x->right=creat(x->right);
        x->left=creat(x->left);
    }
    return x;
}
void xbianli(struct A*w)
{
    if(w!=NULL)
    {
        printf("%c ",w->data);
        xbianli(w->left);
        xbianli(w->right);
    }
}
void zbianli(struct A*c)
{
    if(c!=NULL)
    {
        zbianli(c->left);
        printf("%c ",c->data);
        zbianli(c->right);
    }
}
void hbianli(struct A*v)
{
    if(v!=NULL)
    {
        hbianli(v->left);
        hbianli(v->right);
        printf("%c ",v->data);
    }
}

 

 

当我输入ABCD*F*E****** 时,程序并不会停止读入字符,也不会显示我想打印的结果,求大佬帮看看吧

  • 写回答

2条回答 默认 最新

  • 关注

    只需添加一句 x=null就行了;

    而且我还发现当我按下回车时,若是一次性输入的树不完整,那么程序会一直读取,这时无论输入什么都好像读取不了;若一次性输入完整的树, 那么程序可以运行。

    有没有大佬能帮我解释下这个现象。。。。

    #include"stdio.h"
    #include"stdlib.h"
    struct A
    {
        struct A *left;
        struct A *right;    
        char data;
    }*root;
    struct A* creat(struct A*);
    void xbianli(struct A*);
    void zbianli(struct A*);
    void hbianli(struct A*);
    int main()
    {
        root=creat(root);
        xbianli(root);
        zbianli(root);
        hbianli(root);

    struct A* creat(struct A*x)
    {

        x=null;//在这添加了一句
        char c;
        c=getchar();
        if(c!='*')
        {
            x=(struct A*)malloc(sizeof(struct A));
            x->data=c;
            x->right=creat(x->right);
            x->left=creat(x->left);
        }
        return x;
    }
    void xbianli(struct A*w)
    {
        if(w!=NULL)
        {
            printf("%c ",w->data);
            xbianli(w->left);
            xbianli(w->right);
        }
    }
    void zbianli(struct A*c)
    {
        if(c!=NULL)
        {
            zbianli(c->left);
            printf("%c ",c->data);
            zbianli(c->right);
        }
    }
    void hbianli(struct A*v)
    {
        if(v!=NULL)
        {
            hbianli(v->left);
            hbianli(v->right);
            printf("%c ",v->data);
        }
    }

     

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

报告相同问题?

悬赏问题

  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程