You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉树转前/后序遍历链表求助:生成链表元素全为零

问题诊断与修复方案

嘿,我一眼就瞅到你代码里的关键问题了——就是createNode函数里的内存分配搞错了!先看看你给出的代码片段里的坑:

typedef struct list { int data; struct list next; } List;
List
createNode(int data) {
// create node in memory
List* list = malloc(sizeof(list));
// ...(剩下的代码没写完,但核心问题就在这一行)

你这里用了malloc(sizeof(list)),但list是一个List*类型的指针啊!在大多数系统里,指针的大小是4或者8字节,可你的List结构体明明包含了一个int(通常4字节)加一个指针(4/8字节),实际需要的内存大小应该是sizeof(List)才对。用指针的大小去分配内存,会导致空间不够,后续给list->data赋值的时候要么内存越界,要么就是写到了未初始化的内存区域,最终就表现成链表元素全是0了。

给你修复好的createNode函数,顺便加了内存分配失败的检查(这是个好习惯,能避免后续空指针崩溃):

List* createNode(int data) {
    // 分配结构体本身的大小,而不是指针的大小
    List* newNode = malloc(sizeof(List));
    if (newNode == NULL) {
        fprintf(stderr, "内存分配失败!\n");
        exit(EXIT_FAILURE);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

另外再给你提两个小建议:

  • 构建链表的时候,如果是递归遍历二叉树,最好用二级指针传递尾节点,或者每次返回新的尾节点,别每次都从头遍历找尾,效率太低;
  • 用完链表之后一定要记得遍历释放所有节点的内存,不然会造成内存泄漏;
  • 后序遍历的逻辑虽然和前序类似,但要严格遵循「左子树→右子树→根节点」的访问顺序,别搞混了。

内容的提问来源于stack exchange,提问作者Robert DeRienzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:14