Skip to content

Commit d92aa2c

Browse files
Add 0112.路径总和.md C语言解法
1 parent adac0c7 commit d92aa2c

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

problems/0112.路径总和.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,63 @@ func traversal(_ cur: TreeNode?, count: Int) {
10061006
}
10071007
```
10081008

1009+
## C
1010+
0112.路径总和
1011+
递归法:
1012+
```c
1013+
bool hasPathSum(struct TreeNode* root, int targetSum){
1014+
// 递归结束条件:若当前节点不存在,返回false
1015+
if(!root)
1016+
return false;
1017+
// 若当前节点为叶子节点,且targetSum-root的值为0。(当前路径上的节点值的和满足条件)返回true
1018+
if(!root->right && !root->left && targetSum == root->val)
1019+
return true;
1020+
1021+
// 查看左子树和右子树的所有节点是否满足条件
1022+
return hasPathSum(root->right, targetSum - root->val) || hasPathSum(root->left, targetSum - root->val);
1023+
}
1024+
```
1025+
1026+
迭代法:
1027+
```c
1028+
// 存储一个节点以及当前的和
1029+
struct Pair {
1030+
struct TreeNode* node;
1031+
int sum;
1032+
};
1033+
1034+
bool hasPathSum(struct TreeNode* root, int targetSum){
1035+
struct Pair stack[1000];
1036+
int stackTop = 0;
1037+
1038+
// 若root存在,则将节点和值封装成一个pair入栈
1039+
if(root) {
1040+
struct Pair newPair = {root, root->val};
1041+
stack[stackTop++] = newPair;
1042+
}
1043+
1044+
// 当栈不为空时
1045+
while(stackTop) {
1046+
// 出栈栈顶元素
1047+
struct Pair topPair = stack[--stackTop];
1048+
// 若栈顶元素为叶子节点,且和为targetSum时,返回true
1049+
if(!topPair.node->left && !topPair.node->right && topPair.sum == targetSum)
1050+
return true;
1051+
1052+
// 若当前栈顶节点有左右孩子,计算和并入栈
1053+
if(topPair.node->left) {
1054+
struct Pair newPair = {topPair.node->left, topPair.sum + topPair.node->left->val};
1055+
stack[stackTop++] = newPair;
1056+
}
1057+
if(topPair.node->right) {
1058+
struct Pair newPair = {topPair.node->right, topPair.sum + topPair.node->right->val};
1059+
stack[stackTop++] = newPair;
1060+
}
1061+
}
1062+
return false;
1063+
}
1064+
```
1065+
10091066

10101067

10111068
-----------------------

0 commit comments

Comments
 (0)