😎풀이

해당 문제는, dfs를 잘 이해하고 있으면 문제 없이 풀이가 가능하다. 주요 포인트는 메인 함수를 재귀적으로 호출하여 remain 값과 leaf 노드의 값을 비교하여 풀이한다는 점

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function hasPathSum(root: TreeNode | null, targetSum: number): boolean {
    // 빈 트리인 경우 false 반환
    if (!root) return false;
    
    // 현재 노드가 leaf 노드인 경우 (자식이 없는 경우)
    if (!root.left && !root.right) {
        // targetSum이 현재 노드의 값과 같은지 확인
        return targetSum === root.val;
    }
    
    // 남은 합계 계산 (목표 합계 - 현재 노드 값)
    const remainingSum = targetSum - root.val;
    
    // 왼쪽 또는 오른쪽 서브트리에서 remainingSum을 만족하는 경로가 있는지 재귀적으로 확인
    return (
        // 왼쪽 서브트리 확인
        (root.left && hasPathSum(root.left, remainingSum)) ||
        // 오른쪽 서브트리 확인
        (root.right && hasPathSum(root.right, remainingSum)) ||
        // 둘 다 없으면 false
        false
    );
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글