Skip to content

Conversation

@BangDori
Copy link
Member

문제

Type Info
Time Complexity O(N)
Space Complexity O(N)
Algorithm dfs
Data Structure X

Constraints

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

Edge Case

  • root = [1, 2], targetSum = 0

트리를 탐색할 때 시작 값을 0으로 하게 되면 위 반례가 생기므로 반드시 루트 노드의 값을 시작으로 탐색을 진행하여야 합니다.

풀이

  1. dfs를 이용해 트리의 리프 노드까지 탐색한다.
  2. 리프 노드에 도달하였을 때 목표 합과 동일한지 확인한다.
    2-1. 동일하다면 true를 반환한다.

어려웠던 점

  • �dfs를 진행하는 동안 dfs 내부에서 curr 로컬 변수가 생성되게 되니까 공간 복잡도는 O(N) 일까요?

알게된 점

  • 없음

Comment on lines +17 to +24
const dfs = (tree, curr) => {
if (tree.left) dfs(tree.left, curr + tree.left.val);
if (tree.right) dfs(tree.right, curr + tree.right.val);
if (!tree.left && !tree.right && curr === targetSum) {
answer = true;
return;
}
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

재귀는 탈출조건을 가장 상단에 적는다고 알고있는데 아래에 배치하셨네요 이러면 리프노드에서 한단계 더 밑으로 내려가서 검사를 진행한 이후에 진행이 될거같은데 맞나요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 자식이 있다. -> 메서드 호출
  2. 자식이 없다. -> targetSum과 비교

dfs 함수가 결국 위 두가지로 나뉘기 때문에, 재귀 함수 내부의 배치 순서가 크게 중요하지 않다고 생각했던 것 같습니다.

근데 생각해보니까 함수의 최하단에 배치되어 있어 탈출을하는 경우에도 결국 모든 라인을 해석한 후 탈출하게 되겠네요. 짚어주셔서 감사합니다 ㅎㅎ

@github-actions github-actions bot merged commit 382b135 into main Jan 3, 2025
2 checks passed
@BangDori BangDori deleted the bangdori/path-sum branch January 3, 2025 17:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants