前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >112. 路径总和

112. 路径总和

作者头像
chuckQu
发布2022-08-19 14:46:55
2090
发布2022-08-19 14:46:55
举报
文章被收录于专栏:前端F2E

112. 路径总和

力扣题目链接[1]

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

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

示例1:

代码语言:javascript
复制
输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

提示:

  • 树中节点的数目在范围 [0, 5000]
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

思路:

本题采用递归的思路实现。

递归

递归终止条件是,如果当前节点为空,则直接返回false。如果当前节点存在,但是不存在左右子节点,其实就是叶子节点。则判断当前节点的值是否等于第二个参数目标值。如果相等,则意味着存在这么一条路径,否则表示此路不通。

如果当前节点不是叶子节点,那么就递归处理左右子节点。此时需要将第二个参数减去当前节点的值,更新目标值,方便后续判断。这里采用短路运算进行递归,只要找到一条路径,则提前返回。

代码语言:javascript
复制
/**
 * @param {TreeNode} root
 * @param {number} targetSum
 * @return {boolean}
 */
var hasPathSum = function(root, targetSum) {
    if (!root) return false; // 递归终止条件
    if (!root.left && !root.right) return root.val === targetSum; // 已经是叶子节点,判断与目标数值是否相等即可
    targetSum = targetSum - root.val; // 更新目标数值
    return hasPathSum(root.left, targetSum) || hasPathSum(root.right, targetSum); // 判断左右子树
};

总结

本题考查递归的应用。这里通过传入第二个参数来实时的更新目标值,方便判断子节点的值是否与最新的目标值相等,如果相等,则意味着存在一条路径,路径之和等于目标数值。剩下的就是不断回溯,并通过短路运算提前返回。

参考资料

[1]

力扣题目链接: https://leetcode-cn.com/problems/path-sum/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 112. 路径总和
    • 递归
      • 总结
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档