自己写的:
需要审清题意,最后必须是叶子节点(没有子节点的节点)。
利用递归的方法
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
bool fun(TreeNode* root, int min, int sum){
min += root->val;
// 有负数,所以不需要判断
// if(min > sum) return false;
if(! root->left && ! root->right && min == sum)
return true;
bool ans1 = false;
bool ans2 = false;
if(root->left)
ans1 = fun(root->left, min, sum);
if(root->right)
ans2 = fun(root->right, min, sum);
return ans1 || ans2;
}
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL)
return false;
return fun(root, 0, sum);
// write code here
}
};
模板的:
不敢这么写
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL)
return false;
if(root->right == NULL && root->left == NULL && root->val == sum)
return true;
return hasPathSum(root->left, sum-root->val)||hasPathSum(root->right, sum-root->val);
}
};