题目
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。

解析
// 深度遍历左右子树访问到叶子节点
// 每遍历到一个节点,就在targetSum中减去节点的值,传递给下一层
// 到达叶子节点时,值为0,则存在一条路,返回true
你的思路方向正确(DFS遍历,路径和减法),但代码有一处关键错误:
空节点处理 :当
root === null时,应返回false(表示无路径),但当前返回undefined(JavaScript 会隐式返回undefined,导致后续逻辑错误)。
- 为什么空树必须返回
false?(提示:路径和需从根到叶子,空树无路径,自然要返回false)
答案
javascript
/**
* 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 {boolean}
*/
var hasPathSum = function(root, targetSum) {
if(root === null) return false; //注意这里不能写return,要写return false
targetSum -= root.val;
if(root.left === null && root.right === null && targetSum === 0) return true;
return hasPathSum(root.left, targetSum) || hasPathSum(root.right, targetSum);
};
复杂度分析
时间复杂度:O(n),其中 n 为二叉树的节点个数。
空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。