给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
本题采用遍历每个节点开始的路径的思路,递归所有可能的结果,然后把总数加起来。代码如下:
class Solution {
public:
// 递归单个节点的所有路径
int traversal(TreeNode* cur, long targetSum) {
if(cur == nullptr) return 0;
int res = 0;
if(cur->val == targetSum) {
res++;
}
res += traversal(cur->left, targetSum - cur->val);
res += traversal(cur->right, targetSum - cur->val);
return res;
}
int pathSum(TreeNode* root, int targetSum) {
if(root == nullptr) return 0;
int res = traversal(root, targetSum);
// 对所有节点进行遍历
res += pathSum(root->left, targetSum);
res += pathSum(root->right, targetSum);
return res;
}
};