leaf node의 특성과 dfs를 알고 있다면 쉽게 풀이가 가능한 문제이다.
자식 노드를 재귀적으로 탐색하며 목표치와 현재까지의 합을 비교하며 정답을 추려내면 해결됨
/**
* 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 pathSum(root: TreeNode | null, targetSum: number): number[][] {
const result = []
// leaf node 탐색이므로 dfs 사용
function dfs(node: TreeNode | null, sum: number, path: number[]) {
if(!node) return
const currentSum = sum + node.val
const currentPath = [...path, node.val]
// 자식 노드가 없는 leaf node에서 현재까지의 합이 목표치와 같다면 정답에 추가
if(!node.left && !node.right && currentSum === targetSum) {
result.push(currentPath)
return
}
// 자식 노드 재귀적 탐색
dfs(node.left, currentSum, currentPath)
dfs(node.right, currentSum, currentPath)
}
dfs(root, 0, [])
return result
};