112. 路径总和
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
题目分析
递归函数究竟什么时候需要返回值,什么时候不要返回值?
如果需要搜索整颗二叉树,那么递归函数就不要返回值,如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。
递归法
终止条件:
到叶子结点,(1)sum == target 返回true
(2)sum != target 返回false
class Solution {
public:
int sum = 0;
bool backtracking(TreeNode* cur, int targetSum){
if(cur->left == nullptr && cur->right == nullptr && sum == targetSum){
return true;
}
if(cur->left == nullptr && cur->right == nullptr){
return false;
}
if(cur->left != nullptr){
sum += cur->left->val;
if(backtracking(cur->left, targetSum)) return true;
sum -= cur->left->val;
}
if(cur->right != nullptr){
sum += cur->right->val;
if(backtracking(cur->right, targetSum)) return true;
sum -= cur->right->val;
}
return false;
}
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr) return false;
sum += root->val;
return backtracking(root, targetSum);
}
};