二叉树

路径总和 III

中等#437Java时间 O(n),哈希表平均情况空间 O(h)

题目要做什么

统计和等于 targetSum 的向下路径数量。路径不必从根开始,也不必在叶子结束,但只能沿父到子的方向。

题目示例输入root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
题目示例输出3

01 为什么这样做

记录当前祖先路径的前缀和出现次数。到达前缀 sum 时,之前的 sum−target 每出现一次,就对应一条以当前节点结尾的路径。返回父层前撤销当前前缀,防止混入其他分支。

始终成立的条件

count 只保存当前根到父节点路径上的前缀;初始 0 出现一次。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public int pathSum(TreeNode root, int targetSum) {3        Map<Long, Integer> count = new HashMap<>();4        count.put(0L, 1);5        return visit(root, 0L, targetSum, count);6    }7    private int visit(TreeNode node, long sum, int target, Map<Long, Integer> count) {8        if (node == null) return 0;9        sum += node.val;10        int result = count.getOrDefault(sum - target, 0);11        count.put(sum, count.getOrDefault(sum, 0) + 1);12        result += visit(node.left, sum, target, count);13        result += visit(node.right, sum, target, count);14        count.put(sum, count.get(sum) - 1);15        return result;16    }17}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索