hyp永恒冰川 2022-04-07 15:53 采纳率: 66.7%
浏览 30
已结题

C语言二叉树的先序创建问题,我是一个数据结构的初学者,这个问题困扰我很久了,希望有人能够帮帮我

这是先序创建的函数:
node* precreatebtnode(node* btnode) {
char ch;
btnode = (node*)malloc(sizeof(node));
ch = getchar();
if (ch == '#') {
btnode = NULL;
}
else {

    btnode->data = ch;
    precreatebtnode(btnode->lchild);
    precreatebtnode(btnode->rchild);
}
return btnode;

}
void premaketree(binarytree* bt) {
precreatebtnode(bt->root);
}
这是调试时出现的错误:

img

这是所有的代码:

img

  • 写回答

2条回答 默认 最新

  • 我秃了,但没强 2022-04-07 16:41
    关注

    在precreatebtnode这个函数中,btnode被malloc赋值后已经和原来的bt->root不是一个东西了。注意:指针实际上是一个指针类型数值,给其他函数传入指针,实际上传入的是这个指针类型数值,因此在函数中修改指针本身的值,是不会传回调用它的函数中的,只有修改指针指向的地址中的值才能在另一个函数中访问同一个地址获得相同的值。例子如下:

    int* creatPoint1(int* p, int val)
    {
        p = malloc(sizeof(int));
        *p = val;
        return p;
    }
    int* creatPoint2(int* p, int val)
    {
        *p = val;
        return p;
    }
    
    void main()
    {
        int *p;
        creatPoint1(p, 1);
        printf("%d\n", *p);  //出错,这个p和 creatPoint1内malloc出的指针并非同一个指针,并不指向同一个地址
        p = creatPoint1(p, 1);
        printf("%d\n", *p);  //正确,经过接收返回值后,此时p和creatPoint1内malloc出的指针已经指向同一个地址
        p = malloc(sizeof(int));
        creatPoint2(p, 1);
        printf("%d\n", *p);  //正确,在creatPoint2中改变了p指向的地址中的值,可以在此处调用到
    }
    

    你的程序可以这样修改:

    
    node* precreatebtnode() {
        char ch;
        node* btnode;
        ch = getchar();
        if (ch == '#') {
            return NULL;
        }
        else {
            btnode = (node*)malloc(sizeof(node));
            btnode->data = ch;
            btnode->lchild = precreatebtnode();
            btnode->rchild = precreatebtnode();
        }
        return btnode;
    }
    void premaketree(binarytree* bt) {
        bt->root = precreatebtnode();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月9日
  • 已采纳回答 4月7日
  • 修改了问题 4月7日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测