Search

Path Sum

문제 설명 : 제공된 트리가 Root → Leef 노드까지 경로에 존재하는 모든 노드의 val을 합쳤을 때, targetSum을 만들 수 있는 경로가 있는지 반환
풀이 방법
DFS를 통해, Leef 노드까지 탐색 후 targetSum과 동일한지 비교하였다.
하위로 내려가면서, 현 노드의 값을 누적하며 Sum을 만들었다.
시간복잡도 : O(N)O(N)
성공 코드
# 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: def search_tree(node, current_sum): # 현 노드가 Leef 노드이며, root -> leef 노드까지의 합이 targetSum 인지 여부 if not node.left and not node.right and current_sum + node.val == targetSum: return True # 아니라면 하위 탐색 left = search_tree(node.left, current_sum + node.val) if node.left else False right = search_tree(node.right, current_sum + node.val) if node.right else False return left or right # Root 노드가 존재 if root: # 좌/우 하나라도 하위 트리가 있다면 탐색 if root.left or root.right: left = search_tree(root.left, root.val) if root.left else False right = search_tree(root.right, root.val) if root.right else False return left or right # Root 노드만 존재하는 경우 else: return root.val == targetSum # Root 노드도 없는 빈 트리일 경우 else: return False
Python
복사