【问题标题】:What is wrong with the following binary tree inorder traversal?下面的二叉树中序遍历有什么问题?
【发布时间】:2021-12-05 20:01:21
【问题描述】:

正在做https://leetcode.com/problems/binary-tree-inorder-traversal/ 。问题如下

给定二叉树的根,返回它的中序遍历 节点的值。

以下结构用作二叉树节点。

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};

下面是我提交给 leetcode 的代码。

void inOrderTraversalHelper(struct TreeNode* root, int* returnSize, int** result_ref) {
    if (root != NULL) {
        inOrderTraversalHelper(root->left, returnSize, result_ref);        
        if (*returnSize == 0) {
            *result_ref = malloc(sizeof(int));
        } else {
            *result_ref = realloc(*result_ref, 
            (sizeof(int) * (*returnSize + 1)));
        }
        *((*result_ref) + *returnSize) = root->val;
        
        *returnSize = *returnSize + 1;
        inOrderTraversalHelper(root->right, returnSize, result_ref);
    }
}


int* inorderTraversal(struct TreeNode* root, int* returnSize) {
    int* result = NULL;
    int ** result_ref = &result;
    returnSize = malloc(sizeof(int));
    *returnSize = 0;
    if (root != NULL) {
        inOrderTraversalHelper(root, returnSize, result_ref);
    }
 
    return result;
}

我在 leetcode 上运行上面的代码。它没有通过第一个测试用例 ([1,null,2,3])。我的代码输出只是“ ]"。

我觉得我几乎可以肯定地错误地使用了 malloc 和 realloc,但我不确定如何。

【问题讨论】:

  • 请阅读“如何创建minimal reproducible example”并相应地编辑您的问题。包括示例输入、您的预期输出以及您在问题中得到的实际输出。包括您收到的任何错误消息。
  • 谢谢,已更新。
  • 这仍然不是 MCVE(Minimal, Complete, Verifiable Example — 或 MRE 或 SO 现在使用的任何名称)。您没有显示树是如何创建的,因此问题可能出在那里而不是在遍历代码中。
  • 我建议创建一个 simple 辅助函数add_to_array(),它将简单地将新元素附加到现有数组并处理内存管理,并让遍历函数单独处理遍历。
  • 我再次更新,这次是从 leetcode 复制实际问题以及他们为二叉树节点提供的结构定义。我不知道树是如何创建的。

标签: c memory memory-management memory-leaks heap-memory


【解决方案1】:

我的代码很好,除了这一行

returnSize = malloc(sizeof(int));

我正在更改 returnSize 指向的内存块。它的调用者已经分配了内存,我不应该在这里使用 malloc 。这导致 leetcode 访问了我返回值的错误部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2021-12-25
    • 1970-01-01
    • 2021-03-08
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多