반응형
Path Sum
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.
반응형
'알고리즘 스터디' 카테고리의 다른 글
[Leetcode/파이썬] 17. Letter Combinations of a Phone Number (0) | 2025.04.30 |
---|---|
[Leetcode/파이썬] 150. Evaluate Reverse Polish Notation (0) | 2025.04.29 |
[Leetcode/파이썬] 215. Kth Largest Element in an Array (0) | 2025.04.20 |
[Leetcode/파이썬] 72. Edit Distance (0) | 2025.04.20 |
[Leetcode/파이썬] 191. Number of 1 Bits (0) | 2025.04.20 |