Leetcode:124. 두 갈래 나무의 최대 경로와
2198 단어 Leetcode
1
/ \
2 3
출력: 6 예 2: 입력: [-10,9,20,null,null,15,7]
-10/ 9 20/ 15 7
출력: 42
학습, 코드
이해:1.두 갈래 트리의 한 노드에서 다른 노드로 가는 경로는 반드시 두 노드의 부모 노드를 통과해야 한다.2. 경로는 한 하위 노드에서 이 하위 노드의 부모 노드로... 마지막 부모 노드를 제외하고 다른'부'노드는 한 하위 트리만 지나갈 수 있다.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
backtrack(root);
return max;
}
private int backtrack(TreeNode root){
if(root == null) return Integer.MIN_VALUE;
int left = backtrack(root.left);
int right = backtrack(root.right);
// : , root , int left,right pick root
// 。max = Math.max(max,Math.max(right,left)); //pick left branch or right branch
max = Math.max(max,root.val); //pick root
max = Math.max(max,root.val+Math.max(0,left)+ Math.max(0,right) ); // pick root + MAX(0,left) + MAX(0,right)
return root.val + Math.max(0,Math.max(left,right));
}
}
4.10 검토
class Solution {
int max=Integer.MIN_VALUE;// MIN_VALUE
public int maxPathSum(TreeNode root) {
dg(root);
return max;
}
public int dg (TreeNode root){
if(root==null)return 0;
int left=dg(root.left);
int right=dg(root.right);
//if(root.left!=null)left=root.left.val;// : ,
//if(root.right!=null)right=root.right.val;//
max=Math.max(root.val,max);// ;
max=Math.max(root.val+Math.max(left,0),max);//Math.max(left,0) , +left ; //
max=Math.max(root.val+Math.max(right,0),max); //
max=Math.max(root.val+Math.max(left,0)+Math.max(right,0),max); // ;
return root.val+Math.max(Math.max(left,right),0); // ,
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.