和之前那个题一样,递归写的不够巧妙,这里巧妙用了和减值:
贴上自己的:
class Solution {
public:
bool hasPathSum(TreeNode *root, int sum) {
if(!root)
return false;
bool result=false;
dfs(root,0,sum,result);
return result;
}
void dfs(TreeNode *root,int res,int sum,bool &result){
if(result==true)
return;
res+=root->val;
if(!root->left&&!root->right&&res==sum)
{
result=true;
return;
}
if(root->left)
dfs(root->left,res,sum,result);
if(root->right)
dfs(root->right,res,sum,result);
}
};
巧妙递归:
class Solution {
public:
bool hasPathSum(TreeNode *root, int sum) {
if(!root)
return false;
if(!root->left&&!root->right){
return sum==root->val;
}
return (hasPathSum(root->left,sum-root->val)||
hasPathSum(root->right,sum-root->val));
}
};