牛客题霸 [二叉树中是否存在节点和为指定值的路径] C++题解/答案
题目描述
给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径,
例如:
给出如下的二叉树,\ sum=22 sum=22,
返回true,因为存在一条路径 5\to 4\to 11\to 25→4→11→2的节点值之和为 22
题解:
不断递归左右子树,递归过程中不断用sum-当前节点的值,到叶子节点的是否特判sum减去叶子节点是否为0
注意,要先判断root是否为NULL,再判断左右子树的情况,否则会段错误
代码:
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
class Solution {
public:
/** * * @param root TreeNode类 * @param sum int整型 * @return bool布尔型 */
bool hasPathSum(TreeNode* root, int sum) {
// write code here
if(root==NULL)return 0;
if(root->left==NULL&&root->right==NULL&&sum-(root->val)==0)return 1;
return hasPathSum(root->left,sum-(root->val))||hasPathSum(root->right,sum-(root->val));
}
};