LeetCode 分类刷题:112. 路径总和

题目

给你二叉树的根节点 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) 的栈空间。

相关推荐
鹿心肺语2 小时前
前端HTML转PDF的两种主流方案深度解析
前端·javascript
我是咸鱼不闲呀2 小时前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划
qq7422349842 小时前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程
一个懒人懒人2 小时前
Promise async/await与fetch的概念
前端·javascript·html
A尘埃2 小时前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹2 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
不穿格子的程序员3 小时前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物3 小时前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
铉铉这波能秀3 小时前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士3 小时前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法