# 二叉树中是否有节点的和等于某个值

# 题目

输入一颗二叉树和一个整数,判断是否存在节点值的和等于输入的整数。

# 思路

  • 把节点和都存起来,最后再判断

# 代码

function hasSum(node, target) {
  let num = 0
  const result = []
  help(node, result, num, target)
  console.log(result)
  return result.indexOf(target) >= 0
}
function help(node, result, num, target) {
  if (!node.key) return
  num += node.key
  if (!node.left && !node.right) {
    result.push(num)
  }
  if (node.left) help(node.left, result, num, target)
  if (node.right) help(node.right, result, num, target)
}

# 扩展

假如存在这个节点和等于输入值,输出所有路径。

# 思路

  • 利用回溯算法的思路
  • 输入的值 target 减去 key,如果存在这条路径,最后肯定会相等

# 代码

function hasPath(node, target) {
  const result = [], single = [];
  help(node, result, single, target)
  console.log(result)
  return result
}
function help(node, result, single, target) {
  if (!node.key) return
  single = [...single, node.key]
  if (!node.left && !node.right && node.key === target) {
    result.push(single)
  }
  if (node.left) help(node.left, result, single, target - node.key)
  if (node.right) help(node.right, result, single, target - node.key)
}