437. 路径总和III

深度优先搜索

class Solution {
    public int pathSum(TreeNode root, int targetSum) {

        /**
         * 空节点返回0
         */
        if (root == null){
            return 0;
        }

        /**
         * 分两种情况:路径包含该节点和不包含
         * 两种情况需要分别递归,因此需要定义一个其他的方法
         */
        int sum = ContainSelf(root, targetSum);
        sum += pathSum(root.left, targetSum);
        sum += pathSum(root.right, targetSum);

        return sum;
    }

    public int ContainSelf(TreeNode root, int targetSum){

        if (root == null){
            return 0;
        }

        int sum = 0;

        if (root.val == targetSum){
            sum++;
        }

        return sum + ContainSelf(root.left, targetSum - root.val) + ContainSelf(root.right, targetSum - root.val);
    }
}

/**
 * 时间复杂度 O(n^2)
 * 空间复杂度 O(logn)
 */

https://leetcode-cn.com/problems/path-sum-iii/

posted @ 2021-12-26 14:05  振袖秋枫问红叶  阅读(27)  评论(0)    收藏  举报