题目描述
思路分析
因为是从根节点到叶节点的,因此不用关心中间节点,只要在判断走到叶节点时,一层层减去每一层的节点的值与当前叶子
节点的值一致,则肯定满足条件。
另外,注意避免下面注释的2个坑。
代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if (!root) {
return false;
}
// 坑1:误以为当前节点比剩余的值大即认为失败,因为中间节点正负数都有可能,并不只是一味的正数相加
// 比如1->-2->1->-1(sum=-2)
//if (root->val > sum) {
// return false;
//}
// 坑2:误认为中间某一个节点值与减去上几层之后的值一致,就认为到叶子节点就会大于sum,其实还是
// 没有考虑中间有正负的情况
//if (root->val == sum && (root->left || root->right)) {
// return false;
//}
// 这里表明走到叶子节点,满足从根节点到叶节点,值为sum
if (root->val == sum && !root->left && !root->right) {
return true;
}
return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);
}
};