mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
添加 0113.路径总和II C语言解法
This commit is contained in:
@ -1007,7 +1007,7 @@ func traversal(_ cur: TreeNode?, count: Int) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
## C
|
## C
|
||||||
0112.路径总和
|
> 0112.路径总和
|
||||||
递归法:
|
递归法:
|
||||||
```c
|
```c
|
||||||
bool hasPathSum(struct TreeNode* root, int targetSum){
|
bool hasPathSum(struct TreeNode* root, int targetSum){
|
||||||
@ -1062,6 +1062,69 @@ bool hasPathSum(struct TreeNode* root, int targetSum){
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
> 0113.路径总和 II
|
||||||
|
```c
|
||||||
|
int** ret;
|
||||||
|
int* path;
|
||||||
|
int* colSize;
|
||||||
|
int retTop;
|
||||||
|
int pathTop;
|
||||||
|
|
||||||
|
void traversal(const struct TreeNode* const node, int count) {
|
||||||
|
// 若当前节点为叶子节点
|
||||||
|
if(!node->right && !node->left) {
|
||||||
|
// 若当前path上的节点值总和等于targetSum。
|
||||||
|
if(count == 0) {
|
||||||
|
// 复制当前path
|
||||||
|
int *curPath = (int*)malloc(sizeof(int) * pathTop);
|
||||||
|
memcpy(curPath, path, sizeof(int) * pathTop);
|
||||||
|
// 记录当前path的长度为pathTop
|
||||||
|
colSize[retTop] = pathTop;
|
||||||
|
// 将当前path加入到ret数组中
|
||||||
|
ret[retTop++] = curPath;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 若节点有左/右孩子
|
||||||
|
if(node->left) {
|
||||||
|
// 将左孩子的值加入path中
|
||||||
|
path[pathTop++] = node->left->val;
|
||||||
|
traversal(node->left, count - node->left->val);
|
||||||
|
// 回溯
|
||||||
|
pathTop--;
|
||||||
|
}
|
||||||
|
if(node->right) {
|
||||||
|
// 将右孩子的值加入path中
|
||||||
|
path[pathTop++] = node->right->val;
|
||||||
|
traversal(node->right, count - node->right->val);
|
||||||
|
// 回溯
|
||||||
|
--pathTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int** pathSum(struct TreeNode* root, int targetSum, int* returnSize, int** returnColumnSizes){
|
||||||
|
// 初始化数组
|
||||||
|
ret = (int**)malloc(sizeof(int*) * 1000);
|
||||||
|
path = (int*)malloc(sizeof(int*) * 1000);
|
||||||
|
colSize = (int*)malloc(sizeof(int) * 1000);
|
||||||
|
retTop = pathTop = 0;
|
||||||
|
*returnSize = 0;
|
||||||
|
|
||||||
|
// 若根节点不存在,返回空的ret
|
||||||
|
if(!root)
|
||||||
|
return ret;
|
||||||
|
// 将根节点加入到path中
|
||||||
|
path[pathTop++] = root->val;
|
||||||
|
traversal(root, targetSum - root->val);
|
||||||
|
|
||||||
|
// 设置返回ret数组大小,以及其中每个一维数组元素的长度
|
||||||
|
*returnSize = retTop;
|
||||||
|
*returnColumnSizes = colSize;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user