LeetCode 第437题:路径总和 III

前言

MD,每次刷 leetcode 都感觉智商被碾压,摁在地上摩擦的那种。怎么会有这么多优秀的人,我太难了!!!

题目描述

本题的思路在于一个 sum - root.val。这是啥意思呢?想想看,从任意节点 A 开始,到某一节点 B 结束,如果如果要算路上上的和是不是等 sum,那么 sum 先减去 A 的值,剩下的值在跟到 B 的路径的节点相比即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int pathSum(TreeNode root, int sum) {
        if(root == null){
            return 0;
        } 

        return path(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);
    }

    private int path(TreeNode node, int sum){
        if(node == null){
            return 0;
        }
        sum -= node.val;
        return (sum == 0 ? 1 : 0) + path(node.left, sum) + path(node.right, sum);
    }
}

你可能感兴趣的:(LeetCode 第437题:路径总和 III)