Skip to main content

路径总和-iii

Tips

题目类型: Tree, 前缀和

相关题目:

题目

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

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

示例

437-path-sum

输入: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8

输出: 3

解释: 和为 8 的路径有三条

题解

朴素的解法是通过两个深度优先遍历, dfs1 用于遍历每个节点, dfs2 根据遍历到的每个节点, 再往下延伸. 从而计算到每个路径的和是否为 targetSum.

/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {number}
*/
var pathSum = function (root, targetSum) {
let ans = 0

var dfs1 = function (root) {
if (!root) return

dfs2(root, root.val)
dfs1(root.left)
dfs1(root.right)
}

var dfs2 = function (root, val) {
if (val === targetSum) ans++

if (root.left) dfs2(root.left, val + root.left.val)
if (root.right) dfs2(root.right, val + root.right.val)
}

dfs1(root)
return ans
}

时间复杂度: O(n2)

空间复杂度: O(n)