112. Path Sum

26 年 3 月 5 日 星期四
475 字
3 分钟

112. Path Sum

Screenshot 2026-03-05 at 3.18.11 pm
js
/**
 * 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) {
  // 定义内部递归函数,处理遍历和回溯逻辑
  function traversal(cur, count) {
    // 终止条件1:遇到叶子节点且剩余路径和为0,找到符合条件的路径
    if (cur.left === null && cur.right === null && count === 0) {
      return true
    }
    // 终止条件2:遇到叶子节点但剩余路径和不为0,该路径不符合
    if (cur.left === null && cur.right === null) {
      return false
    }

    // 处理左子树
    if (cur.left !== null) {
      count -= cur.left.val // 扣减左子节点值
      if (traversal(cur.left, count)) {
        // 递归左子树
        return true
      }
      count += cur.left.val // 回溯,恢复count值
    }

    // 处理右子树
    if (cur.right !== null) {
      count -= cur.right.val // 扣减右子节点值
      if (traversal(cur.right, count)) {
        // 递归右子树
        return true
      }
      count += cur.right.val // 回溯,恢复count值
    }

    // 左右子树都无符合条件的路径
    return false
  }

  // 边界条件:根节点为空,直接返回false
  if (root === null) {
    return false
  }
  // 初始调用递归函数,初始剩余值为 目标值 - 根节点值
  return traversal(root, targetSum - root.val)
}
js
/**
 * 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}
 */
function hasPathSum(root, sum) {
  // 1. 空节点直接返回false
  if (root === null) return false

  // 2. 到达叶子节点时,判断当前节点值是否等于剩余目标和
  if (root.left === null && root.right === null && sum === root.val) {
    return true
  }

  // 3. 递归遍历左右子树,目标和减去当前节点值
  const remainingSum = sum - root.val
  return hasPathSum(root.left, remainingSum) || hasPathSum(root.right, remainingSum)
}

文章标题:112. Path Sum

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/112_path_sum[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。