[LeetCode] 124. Binary Tree Maximum Path Sum

5707 단어
두 갈래 나무의 최대 경로와.제목은 두 갈래 트리를 주고 노드는 숫자입니다. 가장 큰 경로와예,
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

두 번째 예를 주의하십시오. 노드 값은 음수가 존재할 것입니다.사고방식은 뒷걸음질입니다. 경로와 항상 왼쪽 아이 val + 오른쪽 아이 val + 현재 노드 val을 포함해야 하기 때문입니다.방법은 다른 뒷순서로 훑어보는 문제와 거의 같고 전체 변수를 만들어 마지막 결과를 기록하는 것이다.helper 함수에서 왼쪽 트리와 오른쪽 트리를 귀속할 때 0과 누가 큰지 기억합니다. 노드 값은 음수를 포함하기 때문입니다.res는 루트입니다.val + left + right.
시간 O(n)
공간 O(n)
Java 구현
 1 class Solution {
 2     int res;
 3 
 4     public int maxPathSum(TreeNode root) {
 5         // corner case
 6         if (root == null) {
 7             return 0;
 8         }
 9         res = Integer.MIN_VALUE;
10         helper(root);
11         return res;
12     }
13 
14     public int helper(TreeNode root) {
15         if (root == null) {
16             return 0;
17         }
18         int left = Math.max(0, helper(root.left));
19         int right = Math.max(0, helper(root.right));
20         res = Math.max(res, left + right + root.val);
21         return Math.max(left, right) + root.val;
22     }
23 }

 
JavaScript 구현
 1 /**
 2  * @param {TreeNode} root
 3  * @return {number}
 4  */
 5 var maxPathSum = function (root) {
 6     let res = -Infinity;
 7     let helper = function (root) {
 8         if (root == null) return 0;
 9         let left = Math.max(0, helper(root.left));
10         let right = Math.max(0, helper(root.right));
11         // let newPath = root.val + left + right;
12         res = Math.max(root.val + left + right, res);
13         return Math.max(left, right) + root.val;
14     }
15     helper(root);
16     return res;
17 };

좋은 웹페이지 즐겨찾기