力扣刷题(第二十五天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

路径总和

解题思路

  1. 问题分析:判断是否存在从根节点到叶子节点的路径,使得路径上所有节点值之和等于给定目标值。
  2. 递归策略
    • 终止条件:当前节点为空时返回False
    • 叶子节点判断:若当前节点是叶子节点(无左右子树),检查当前路径和是否等于目标值。
    • 递归遍历:递归检查左子树或右子树是否存在满足条件的路径,路径和需减去当前节点值。
      # Definition for a binary tree node.
      # class TreeNode:
      #     def __init__(self, val=0, left=None, right=None):
      #         self.val = val
      #         self.left = left
      #         self.right = right
      class Solution:
          def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
              if not root:
                  return False
              # 当前节点是叶子节点,判断路径和是否等于目标值
              if not root.left and not root.right:
                  return root.val == targetSum
              # 递归检查左右子树,路径和减去当前节点值
              return self.hasPathSum(root.left, targetSum - root.val) or self.hasPathSum(root.right, targetSum - root.val)

逐行解释

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        # 递归终止条件:如果当前节点为空,返回False
        if not root:
            return False
        
        # 计算剩余目标值:减去当前节点的值
        current_sum = targetSum - root.val
        
        # 如果当前节点是叶子节点(没有左右子节点)
        if not root.left and not root.right:
            # 判断剩余目标值是否为0,是则存在路径
            return current_sum == 0
        
        # 递归检查左子树或右子树是否存在符合条件的路径
        # 只要任一子树存在路径,结果即为True
        return self.hasPathSum(root.left, current_sum) or self.hasPathSum(root.right, current_sum)

你可能感兴趣的:(leetcode,算法,职场和发展)