面试题 04.12. 求和路径

76 阅读1分钟

题目描述

leetcode-cn.com/problems/pa…

分析

本题的关键在于,怎么去找到所有的和

而这个过程一定是通过递归来完成的

算法

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
}