112. 路径总和 🟩
题目
LeetCode 简单
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回 true;否则,返回 false。
示例:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如图所示。

题解
方法:递归
深度优先 DFS 递归
- 时间复杂度:O(n)
- 空间复杂度:O(h)
js
class TreeNode {
constructor(val, left = null, right = null) {
this.val = val
this.left = left
this.right = right
}
}
function hasPathSum(root, targetSum) {
if (!root) return false
console.log('node', root.val, 'targetSum', targetSum)
if (!root.left && !root.right) return root.val === targetSum
targetSum = targetSum - +root.val
return hasPathSum(root.left, targetSum) || hasPathSum(root.right, targetSum)
}
const tree = new TreeNode(5)
tree.left = new TreeNode(4, new TreeNode(11, new TreeNode(7), new TreeNode(2)))
tree.right = new TreeNode(
8,
new TreeNode(13),
new TreeNode(4, null, new TreeNode(1)),
)
console.log('🌰', hasPathSum(tree, 22))
console.log('-----')
console.log('🌰', hasPathSum(tree, 26))
console.log('-----')
console.log('🌰', hasPathSum(tree, 9))
执行结果
node 5 targetSum 22
node 4 targetSum 17
node 11 targetSum 13
node 7 targetSum 2
node 2 targetSum 2
🌰 true
-----
node 5 targetSum 26
node 4 targetSum 21
node 11 targetSum 17
node 7 targetSum 6
node 2 targetSum 6
node 8 targetSum 21
node 13 targetSum 13
🌰 true
-----
node 5 targetSum 9
node 4 targetSum 4
node 11 targetSum 0
node 7 targetSum -11
node 2 targetSum -11
node 8 targetSum 4
node 13 targetSum -4
node 4 targetSum -4
node 1 targetSum -8
🌰 false