reoger的记录

--以后的你会感激现在那么努力的自己

0%

二叉树中的最大路径和

二叉树中的最大路径和

难度 困难

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:

1
2
3
4
5
6
7
**输入:** [1,2,3]

**1**
**/ \**
**2** **3**

**输出:** 6

示例 2:

1
2
3
4
5
6
7
8
9
**输入:** [-10,9,20,null,null,15,7]

  -10
   / \
  9  **20**
    **/  \**
   **15   7**

**输出:** 42

解题思路

需找一个最大的路径和,势必会以某一个节点为顶点,我们以某个顶点去寻找以其为顶点的最大的路径和,然后遍历二叉树上所有的节点,选出最大的路径和即可。

Solution

Language: Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution {
   private int res = 0;
   public int maxPathSum(TreeNode root) {
        res = Integer.MIN_VALUE;
       oneOther(root);
       return res;
  }
   private int oneOther(TreeNode root){
       if (root == null){
           return 0;
      }
       int left = oneOther(root.left);
       int right = oneOther(root.right);
       res = Math.max(Math.max(left, 0) + Math.max(right, 0) + root.val , res);
          return Math.max(Math.max(left,right), 0)+ root.val;
  }
  }