力扣面试150(65/150)

8.27 112. 路径总和

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

叶子节点 是指没有子节点的节点。

我的思路:

深度优先遍历,最开始是想用加法的,但是每一次递归的话sum都会被初始化,无法进行连续的加。

使用减法,每次遍历到最后一个节点

注意:递归出口,要判断是否为叶子节点,遍历左右子树也要返回值

我的代码:

复制代码
var hasPathSum = function(root, targetSum) {
    if(!root) return false;
    targetSum -= root.val;
    // 判断是否为叶子节点
    if(root.left === null && root.right === null) return targetSum === 0;
    return  hasPathSum(root.left,targetSum) || hasPathSum(root.right,targetSum);
};

总结:这段代码通过递归深度优先遍历二叉树,利用减法逐步减少目标值,并在到达叶子节点时判断剩余值是否为零。若存在从根到叶子节点的路径使得路径和等于目标值,则返回 true,否则返回 false。递归过程中,只要任一子树满足条件即终止遍历,确保高效性。