难度:简单
给你二叉树的根节点 root
和一个表示目标和的整数 targetSum
,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum
。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:false
示例 3:
输入:root = [1,2], targetSum = 0
输出:false
提示:
- 树中节点的数目在范围
[0, 5000]
内 -1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
C++:递归算法
思路:
如果到了叶节点的孩子(null),则说明这个路径不满足,返回false;
如果到叶节点时,targetSum减叶节点值刚好等于0,则说这个路径满足,返回true;
如果还没到叶节点,则继续进行搜索,只要其左右孩子有一个满足,则返回true。
class Solution {
public:
bool result = false;
bool hasPathSum(TreeNode* root, int targetSum) {
if(!root) return false;
if(!root->left && !root->right && (targetSum - root->val == 0))
return true;
return hasPathSum(root->left, targetSum-root->val) || hasPathSum(root->right, targetSum-root->val);
}
};