每日一题,防止痴呆 = =
一、题目大意
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum
二、题目思路以及AC代码
思路
一开始把这道题看成了树中是否存在一条由根节点出发的路径,使得路径和为sum,没有注意必须是叶子节点,但是其实方法是一样的,都是bfs或者dfs,在这里因为递归实现起来比较容易,所以我选择了dfs进行实现。
AC代码
/**
* 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 check(TreeNode* root, int sum, int target) {
// 如果节点值没有负的,则可以再剪枝
// 不过这里我试了一下,节点值是有负的的 = =
sum += root->val;
if (sum == target && !root->left && !root->right) return true;
bool left = root->left ? check(root->left, sum, target) : false;
bool right = root->right ? check(root->right, sum, target) : false;
return left || right;
}
bool hasPathSum(TreeNode* root, int sum) {
if (!root) return false;
return check(root, 0, sum);
}
};
如果有问题,欢迎大家指正!!!