【发布时间】: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