문제 내용
왼쪽에서 오른쪽으로 한개의 라인으로 이었을때 가장 큰 값은?
접근 방법
문제를 이해하기 쉽지 않다.
예제의 Depth가 최대 1 depth로 표현 되어있기 때문이다.
Testcase를 돌려보면 몇개의 Depth가 되든 상관없이 왼쪽의 노드에서 오른쪽 노드까지의 Sum이 최대가 되면 된다.
예를 들자면 다음과 같다.
즉 양수이기만 한다면 left child와 right child 중 가장 큰값을 기준으로 sum을 하면 된다.
이런 그림인데 이 그림으로 인해서 혼돈이 발생 할 수도 있는데, 만약 다음과 같은 경우라면
$$ 3 $$ 이 답이 된다.
즉 어떤 Path든 상관없이 왼쪽 오른쪽의 0이상의 Max 값을 더해서 최고가 되는 값을 구하면 된다.
var maxPathSum = function(root) {
let maxValue = root.val;
let helper = function(node){
if(node === null) return 0;
let centerVal = node.val;
let leftMax = Math.max(helper(node.left),0);
let rightMax = Math.max(helper(node.right),0);
let curVal = centerVal + leftMax + rightMax;
maxValue = Math.max(curVal, maxValue);
return centerVal + Math.max(leftMax ,rightMax);
}
helper(root);
return maxValue;
};
모든 노드를 한번씩만 돌게 됨으로
$$ O(N) $$
이다.
728x90
반응형
'Problem Solving' 카테고리의 다른 글
Sudoku Solver (0) | 2021.05.23 |
---|---|
Minimum Window Substring (0) | 2021.05.22 |
Word Break 2 (0) | 2021.05.19 |
Reverse Nodes in k-Group (0) | 2021.05.18 |
Alien Dictionary (0) | 2021.05.11 |