Bottom up 주제 1 Leet Code124.Binary Tree Maximum Path Sum
2895 단어 Tree
LeetCode 124. Binary Tree Maximum Path Sum
Given a non-empty binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
Example 1:
Input: [1,2,3]
1
/ \
2 3
Output: 6
Example 2:
Input: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
Output: 42
다음은res[0]를 전역 변수로 업데이트하고 helper 함수가 현재 노드를 포함하는 값을 되돌려줍니다.
public int maxPathSum(TreeNode root) {
if (root == null) return 0;
int[] res = new int[]{Integer.MIN_VALUE};
helper(root, res);
return res[0];
}
private int helper(TreeNode root, int[] res) {
if (root == null) return 0;
int left = helper(root.left, res) + root.val;
int right = helper(root.right, res) + root.val;
int max = Math.max(left, right);
max = Math.max(max, left + right - root.val);
max = Math.max(root.val, max);
res[0] = Math.max(res[0], max);
return Math.max(left, Math.max(root.val, right));
}
표준판: 반드시 현재 node에서 현재 답안을 어떻게 갱신하는지 알아야 한다!!!분석 제목에서 우리가 모든 노드에 저장해야 하는 수치는 이 노드를 포함하는 pathsum의 최대 값이기 때문에 가능성은 다음과 같다. (1) 이 노드만 있고, (2) 이 노드 + 왼쪽 아이, (3) 이 노드 + 오른쪽 아이만 있다.동시에 최대치 즉 답을 갱신해야 한다. 가능성은 (1) 이 노드만 있고, (2) 이 노드 + 왼쪽 아이, (3) 이 노드 + 오른쪽 아이, (4) 이 노드 + 왼쪽 아이 + 오른쪽 아이, (5) 왼쪽 아이의 최대치, (6) 오른쪽 아이의 최대치를 포함한다.
public int maxPathSum(TreeNode root) {
if (root == null) return 0;
return dfs(root).res;
}
private Result dfs(TreeNode root) {
if (root == null) return new Result(Integer.MIN_VALUE, 0);
Result result = new Result(Integer.MIN_VALUE, Integer.MIN_VALUE);
Result left = dfs(root.left);
Result right = dfs(root.right);
int _res = Math.max(left.cur + root.val, right.cur + root.val);
int _res1 = Math.max(right.res, left.res);
_res = Math.max(_res, left.cur + right.cur + root.val);
_res = Math.max(_res, root.val);
_res = Math.max(_res, _res1);
int _cur = Math.max(left.cur + root.val, right.cur + root.val);
_cur = Math.max(_cur, root.val);
result.cur = _cur;
result.res = _res;
return result;
}
private class Result{
int res;
int cur;
public Result(int res, int cur) {
this.res = res;
this.cur = cur;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bottom up 주제 1 Leet Code124.Binary Tree Maximum Path Sumbottom up의 방법은 모든 node에 저장해야 할 데이터를 새로운 클래스에 기록하는 것을 말한다. dfs를 할 때 각 노드에서 본 노드의 조작을 한 다음에 새로운 클래스의 대상을 만들고 대상에 기록해야 할 데이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.