给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

    路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

    示例 1:
    image.png

    输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
    输出:3
    解释:和等于 8 的路径有 3 条,如图所示。
    示例 2:

    输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
    输出:3

    提示:

    二叉树的节点个数的范围是 [0,1000]
    -109 <= Node.val <= 109
    -1000 <= targetSum <= 1000


    1. class Solution {
    2. /**
    3. 当targetsum变为零即为存在一条路径和为targetsum,数量+1
    4. 我们需要再以root.left 和 root.right 作为根节点继续寻找
    5. */
    6. public int pathSum(TreeNode root, int targetSum) {
    7. if (root == null) return 0;
    8. return dfs(root,targetSum) + pathSum(root.left,targetSum) + pathSum(root.right,targetSum);
    9. }
    10. public int dfs(TreeNode root, int targetSum) {
    11. if (root == null) return 0;
    12. targetSum -= root.val;
    13. int cnt = 0;
    14. if (targetSum == 0) {
    15. cnt++;
    16. }
    17. cnt += dfs(root.left,targetSum);
    18. cnt += dfs(root.right,targetSum);
    19. return cnt;
    20. }
    21. }