题目大意:找出二叉树中路径和等于目标和的路径个数,节点为整数(可能为负),路径起点不一定为根节点,终点不一定为叶节点,但是路径方向始终向下
分析:二叉树dfs。相比leetcode112、113要注意三点:节点数值可能为负,路径起点可以任选,路径终点不一定是叶节点。
因为路径起点任选,所以要以树中每一个节点为起点dfs,也就是用countHelper统计以该点为起点的路径条数,然后递归统计左右节点为起点的路径条数。
countHelper统计路径条数:注意由于节点值可能为负,所以此时不能return,还要继续递归下去。
由于路径终点不一定是叶节点,所以符合目标的条件比leetcode112、113少了一个,不用判断节点左右孩子是否为空了。
代码:
/**
* 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 {
int ans = 0;
public:
int pathSum(TreeNode* root, int sum) {
if(!root) return 0;
countHelper(root,sum);
pathSum(root->left,sum);
pathSum(root->right,sum);
return ans;
}
void countHelper(TreeNode* root, int sum){
if(!root) return;
if(root->val == sum){
ans++;
}
countHelper(root->left,sum - root->val);
countHelper(root->right,sum - root->val);
}
};