题目表述:给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
示例:给出如下的二叉树,sum=22,
返回true,因为存在一条路径 5→4→11→2的节点值之和为 22
解题思路:此题和NC8解题思路相同,一个需要返回所有路径,一个只需要判断路径是否存在。设置一个状态变量,利用先序遍历实现。当每遍历到一个节点时,计算根节点到当前结点的路径和。当遍历到根节点时,判断路径的和是否等于要求数值,相等则直接状态量标位true后返回;当遍历结束无符合条件的路径则直接返回。
void pre(TreeNode *root, int &sum, bool &a)
{
if(root == nullptr)
return ;
sum -= root->val;
if(root->left==nullptr&&root->right==nullptr&&sum==0)
{
a = true;
return;
}
pre(root->left,sum,a);
pre(root->right,sum,a);
sum += root->val;
}
bool hasPathSum(TreeNode* root, int sum) {
// write code here
bool a = false;
pre(root,sum,a);
return a;
}