113. 路径总和 II (C语言)
用例1 :[1,0,1,1,2,0,-1,0,1,-1,0,-1,0,1,0]
2
用例2 :[-2,null,-3]
-5
temp[i++]=root->val;//开始用 path[*returnSize][i++]在用例1 中会出错,path[0][0]=1,path[0][1]=0。但是在回溯过程中,paht[1][0]没有被赋值。
// else if(n>sum){
// printf("break,root->val=%d,i=%d\n",root->val,i);//希望可以剪枝,但是这会在第二个用例中出错,在数字为负数时,会出错的,n=-5, 数值-2 一进来就返回了
// return false;
// }
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
#define MAX_LEN 1000
bool dfs(struct TreeNode* root, int sum,int **path, int n,int i,int* returnSize, int** returnColumnSizes);
int** pathSum(struct TreeNode* root, int sum, int* returnSize, int** returnColumnSizes){
int **path=malloc(sizeof(int*)*MAX_LEN);
path[0]=malloc(sizeof(int)*MAX_LEN);
*returnSize=0;
*returnColumnSizes=malloc(sizeof(int)*MAX_LEN);
if(dfs(root,sum,path,0,0,returnSize,returnColumnSizes)){
return path;
}
else return NULL;
}
int temp[1000]={0};
bool dfs(struct TreeNode* root, int sum,int **path,int n,int i,int* returnSize, int** returnColumnSizes){
if(root==NULL){
path[(*returnSize)+1]=malloc(sizeof(int)*MAX_LEN);
return false;
}
n=n+root->val;
temp[i++]=root->val;//开始用 path[*returnSize][i++]在用例1 中会出错,path[0][0]=1,path[0][1]=0。但是在回溯过程中,paht[1][0]没有被赋值。
//printf("val %d i=%d,n=%d, path[%d][%d]=%d\n",root->val,i,n,*returnSize,i-1,temp[i-1]);
bool b=dfs(root->left,sum,path,n,i,returnSize,returnColumnSizes);
bool a=dfs(root->right,sum,path,n,i,returnSize,returnColumnSizes);
if(n==sum){
if(root->right==NULL&&root->left==NULL){
//printf("find it,root->val=%d,i=%d\n",root->val,i);
memcpy(path[*returnSize],temp,i*sizeof(int));
(*returnColumnSizes)[*returnSize]=i;
(*returnSize)++;
return true;
}
}
// else if(n>sum){
// printf("break,root->val=%d,i=%d\n",root->val,i);//希望可以剪枝,但是这句会在第二个用例中出错,在数字为负数时,会出错的,n=-5, 数值-2 一进来就返回了
// return false;
// }
return a||b;
}
来源:CSDN
作者:maryTime
链接:https://blog.csdn.net/maryfei/article/details/104758693