题目描述
分析
本题的关键在于,怎么去找到所有的和
而这个过程一定是通过递归来完成的
算法
DFS
过程
从 root 开始进行 DFS
记录一条路径,看此路径节点值的和是否符合要求
看此路径是否存在符合要求的情况
对于 root.left, root.right 向下查找
回溯路径
代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {number} sum
* @return {number}
*/
var pathSum = function (root, sum) {
if (!root) return 0
let pathSum = 0,
cnt = 0
const path = []
const dfs = (root) => {
pathSum += root.val
path.push(root)
if (pathSum === sum) cnt++
let curSum = pathSum
for (let i = 0; i < path.length - 1; i++) {
const node = path[i]
curSum -= node.val
if (curSum === sum) cnt++
}
root.left && dfs(root.left)
root.right && dfs(root.right)
path.pop()
pathSum -= root.val
}
dfs(root)
return cnt
}