讨论/题目交流/二叉树前序遍历递归结果错误/
二叉树前序遍历递归结果错误

测试用例用过了,但是提交的出现了错误,不是很明白注释这一行哪里错了
输入: [1,null,2,3]
1

2
/
3

输出: [1,2,3]
这个用例:[3,1,2]得到的结果是[3,2,-1094795586]
代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

#define MAX 1000
void  Travel(struct TreeNode* root, int* res ,int* returnSize){
    if(root ==NULL) {
      
        return;
    }
    *res = root->val;//改成*(res+*returnSize)= root->val;就可以
    (*returnSize) ++;
    res++;
    Travel(root->left, res,returnSize);
    Travel(root->right,res,returnSize);

}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int *res = (int *)malloc(sizeof(int )*MAX);
*returnSize =0;
Travel(root,res,returnSize);
return res;
}

res只是个局部变量,res++了以后,Travel(root->left, res, returnSize)没有问题,但是Travel(root->right, res, returnSize)的时候,传入的res位置和之前传入到left的位置是同一个位置,所以right运算的时候会覆盖掉left运算的结果。
你传入的时候可以用int** res作为参数

展开全部 2 讨论