알고리즘 스터디

[Leetcode/파이썬] 112. Path Sum

난쟁이 개발자 2025. 4. 29. 22:39
반응형

Path Sum

Difficulty: Easy


Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum.

A leaf is a node with no children.

 

Example 1:

Input: root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
Output: true
Explanation: The root-to-leaf path with the target sum is shown.

Example 2:

Input: root = [1,2,3], targetSum = 5
Output: false
Explanation: There are two root-to-leaf paths in the tree:
(1 --> 2): The sum is 3.
(1 --> 3): The sum is 4.
There is no root-to-leaf path with sum = 5.

Example 3:

Input: root = [], targetSum = 0
Output: false
Explanation: Since the tree is empty, there are no root-to-leaf paths.

 

Constraints:

  • The number of nodes in the tree is in the range [0, 5000].
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

 

# 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 targetSum - root.val == 0 

        targetSum -= root.val 

        return self.hasPathSum(root.left, targetSum) or self.hasPathSum(root.right, targetSum)

이 문제를 보자마자 DFS 를 활용해야 겠다는 생각이 들었음. 

if not root.left and not root.right:
    return remainingSum == 0
  • 현재 노드가 리프 노드인지 확인 (왼쪽, 오른쪽 자식 모두 없음)
  • 리프 노드라면 현재 계산된 값이 0인지 확인.
  • 0이라면 True, 아니라면 False 
targetSum -= root.val
  • 현재 노드의 값을 목표 합에서 빼서 남은 합을 계산
  • 경로를 따라 내려가면서 목표값에서 노드 값을 계속 차감하면서 탐색하게 됨.
return self.hasPathSum(root.left, targetSum) or self.hasPathSum(root.right, targetSum)
  • 리프 노드가 아니라면, 왼쪽 또는 오른쪽 서브트리에서 경로를 찾을 수 있는지 확인.
  • 왼쪽 서브트리에서 재귀적으로 hasPathSum을 호출하고, 현재까지 남은 합들을 전달.
  • 오른쪽 서브트리에서도 같은 작업을 수행
  • OR 연산자를 통하여, 왼쪽이나 오른쪽 중 하나라도 해당하는 경로를 찾으면 return True.
반응형