题目
leetcode 113
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
代码
void dfs(struct TreeNode *root, int arr[], int ind, int **res, int *returnSize, int **returnColumnSizes, int sum) {
if (root == NULL) return ;
sum -= root->val;
arr[ind++] = root->val;
if (sum == 0 && root->left == NULL && root->right == NULL) {
res[*returnSize] = (int *)malloc(sizeof(int) * ind);
for (int i = 0; i < ind; i++) {
res[*returnSize][i] = arr[i];
}
(*returnColumnSizes)[*returnSize] = ind;
(*returnSize)++;
return ;
}
dfs(root->left, arr, ind, res, returnSize, returnColumnSizes, sum);
dfs(root->right, arr, ind, res, returnSize, returnColumnSizes, sum);
}
int** pathSum(struct TreeNode* root, int sum, int* returnSize, int** returnColumnSizes){
*returnSize = 0;
#define MAX 1000000
int **res = (int **)malloc(sizeof(int *) * MAX);
(*returnColumnSizes) = (int *)malloc(sizeof(int) * MAX);
int arr[MAX];
dfs(root, arr, 0, res, returnSize, returnColumnSizes, sum);
return res;
}