严格来讲,本题并不难,但是不知道什么原因上次没有快速解决。
    我觉得这类问题(recursion)就是考抽象+归纳问题的能力
    本题:

    • 以该点为root,可以在任意点中止,就用简单的DFS即可
    • leftpathSum
    • rightpathSum

    代码如下:

    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode(int x) { val = x; }
    8. * }
    9. */
    10. class Solution {
    11. public int pathSum(TreeNode root, int sum) {
    12. if (root == null) {
    13. return 0;
    14. }
    15. else {
    16. return pathSumHelper(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);
    17. }
    18. }
    19. private int pathSumHelper(TreeNode root, int sum) {
    20. if (root == null) {
    21. return 0;
    22. }
    23. int res = 0;
    24. if (sum == root.val) {
    25. res++;
    26. }
    27. if (root.left != null) {
    28. res += pathSumHelper(root.left, sum - root.val);
    29. }
    30. if (root.right != null) {
    31. res += pathSumHelper(root.right, sum - root.val);
    32. }
    33. return res;
    34. }
    35. }

    真的不难,就是下笔前要想明白