重名大师 2023-09-23 15:49 采纳率: 94.4%
浏览 3
已结题

这个二叉树创建代码有什么问题吗


void create(struct cell *p)
{
    int m;
    scanf("%d", &m);
    if (m == -1)
    {
        p = NULL;
    }
    else 
    {
        p = (struct cell*)malloc(sizeof(struct cell));
        p->x = m;
        printf("%d", p->x);
        create(p->left);
        create(p->right);
    }
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-23 18:21
    关注

    【以下回答由 GPT 生成】

    问题分析:

    这段代码中的create函数负责创建二叉树,但存在一个问题。在递归调用create函数创建左子树和右子树之前,对p进行了动态内存分配并赋值,但由于p是函数的形参,它只是一个临时变量,修改p的值并不会影响函数外部的实际参数。

    解决方案:

    可以通过传递指向指针的指针作为函数的参数来解决这个问题,使得函数内部能够修改指针的值。下面是修改后的代码:

    void create(struct cell **pp)
    {
        int m;
        scanf("%d", &m);
        if (m == -1)
        {
            *pp = NULL;
        }
        else 
        {
            *pp = (struct cell*)malloc(sizeof(struct cell));
            (*pp)->x = m;
            printf("%d", (*pp)->x);
            create(&((*pp)->left));
            create(&((*pp)->right));
        }
    }
    

    在主函数中调用create函数时,需要传递指向指针的指针作为实参:

    struct cell *root = NULL;
    create(&root);
    

    这样,函数内部修改指针的值就可以影响到外部的实际参数了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?