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);
}
}
这个二叉树创建代码有什么问题吗
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 【以下回答由 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);
这样,函数内部修改指针的值就可以影响到外部的实际参数了。
【相关推荐】
- 你可以看下这个问题的回答https://ask.csdn.net/questions/7517434
- 这篇博客也不错, 你可以看下交换二叉树中所有结点的左右结点
- 您还可以看一下 Gardener老师的环境配置和二进制转换课程中的 软件开发的常识小节, 巩固相关知识点
- 除此之外, 这篇博客: 如何修改并优化自己的代码?中的 二.逻辑错误 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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函数?