难度 困难
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 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
|
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; } }
|