Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
int sum = root.val; if(left>0) sum += left; if(right>0) sum += right; maxPath = Math.max(sum, maxPath);然後深搜每個節點,該節點返回的是這個節點的值加上較大的左子樹或者較大的右子樹
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { int maxPath = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { dfs(root); return maxPath; } private int dfs(TreeNode root){ if(root==null) return 0; int left = dfs(root.left); int right = dfs(root.right); int sum = root.val; if(left>0) sum += left; if(right>0) sum += right; maxPath = Math.max(sum, maxPath); return Math.max(left, right)>0?root.val+Math.max(left, right):root.val; } }