LeetCode 144. Binary Tree Preorder Traversal

LeetCode 144. Binary Tree Preorder Traversal
LeetCode 144. Binary Tree Preorder Traversal
才5%的内存。(⊙﹏⊙),如果不写free是8.7,写了free是9.6
代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    if (root == NULL) {
        *returnSize = 0;
        return (int*)malloc(sizeof(int) * 0);
    }
    int val = root->val;
    int left = 0;
    int right = 0;
    int *leftRet = preorderTraversal(root->left, &left);
    int *rightRet = preorderTraversal(root->right, &right);
    *returnSize = left + 1 + right;
    int *ret = (int*)malloc(sizeof(int) * *returnSize);
    ret[0] = val;
    for(int i=0; i<left; i++) {
        ret[i + 1] = leftRet[i];
    }
    free(leftRet);
    for(int i=0; i<right; i++) {
        ret[i + left + 1] = rightRet[i];
    }
    free(rightRet);
    return ret;
}

后面改成循环,不知道会怎么样?