public int getMax(TreeNode node) {
if (node == null) {
return 0;
}
int leftVal = Math.max(0, getMax(node.left));
int rightVal = Math.max(0, getMax(node.right));
max = Math.max(max, node.val + leftVal + rightVal);
return node.val + Math.max(leftVal, rightVal);
}
이어진 노드중 가장 큰 값을 구하는 문제로 먼저 재귀 호출을 계속 하면서 트리 끝까지 이동한다.
끝에서부터 음수인 값(leftVal, rightVal)은 더하지 않고 양수인 값만 더해간다.
반환하기 전에 해당 노드 기준으로 max 값을 갱신
자식 노드가 양수더라도 부모 노드 음수 값이 더 크면 해당 노드는 짤린다.
중간에 아니다 싶을때 뚫린 구멍 막는 식으로 풀지 말고 다시 생각해보기..!
'코딩테스트' 카테고리의 다른 글
[프로그래머스, LEVEL2] 게임 맵 최단거리 (BFS) (0) | 2022.12.15 |
---|---|
[LeetCode] 198. House Robber (0) | 2022.12.14 |
[LeetCode] 931. Minimum Falling Path Sum (0) | 2022.12.13 |
[leetcode, 121] best-time-to-buy-and-sell-stock (0) | 2022.12.13 |
[릿코드] 1026. Maximum Difference Between Node and Ancestor (0) | 2022.12.10 |