力扣112. 路径总和
给你二叉树的根节点
root
和一个表示目标和的整数targetSum
。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum
。如果存在,返回true
;否则,返回false
。
叶子节点 是指没有子节点的节点。
提示:
- 树中节点的数目在范围
[0, 5000]
内 -1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr) return false;
if(root->right == nullptr && root->left == nullptr && targetSum-root->val == 0) return true;
return hasPathSum(root->right, targetSum-root->val) || hasPathSum(root->left, targetSum-root->val);
}
};
解题思路:
(1)使用递归思想。
(2)若为空指针,则 false。
(3)若为叶子节点,则计算是否满足路径总和。
(4)最后,若左右子树有一条路径满足则 true。