【leetcode】124.(Hard)Binary Tree Maximum Path Sum
阿新 • • 發佈:2018-12-18
解題思路:
回溯
對於樹的一個結點來說,[左子樹值]、[右子樹值]、[左子樹+右子樹+當前結點值],這三種組合中,必然有一個最大值,將這個最大值儲存在maxValue[0]中,實時更新即可。
函式maxValue返回的是如果一定要包含當前結點值時的最大數值。
提交程式碼:
class Solution {
public int maxPathSum(TreeNode root) {
int[] maxValue=new int[1];
maxValue[0]=Integer.MIN_VALUE;
findMax(maxValue, root);
return maxValue[0];
}
public int findMax(int[] maxValue,TreeNode root) {
if(root==null) return Integer.MIN_VALUE;
if(root.left==null&&root.right==null) {
if(root.val>maxValue[0]) maxValue[0]=root.val;
return root.val;
}
int left= findMax(maxValue,root.left);
int right=findMax(maxValue,root.right);
int value=root.val;
if(left>0) value+=left;
if(right>0) value+=right;
if(value>maxValue[0]) maxValue[0]=value;
value=root.val;
if(left>right&&left>0) value+=left;
else if(right>=left&& right>0) value+=right;
return value;
}
}
執行結果: