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 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c