1. 程式人生 > >【leetcode】124.(Hard)Binary Tree Maximum Path Sum

【leetcode】124.(Hard)Binary Tree Maximum Path Sum

解題思路:
回溯
對於樹的一個結點來說,[左子樹值]、[右子樹值]、[左子樹+右子樹+當前結點值],這三種組合中,必然有一個最大值,將這個最大值儲存在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; } }

執行結果:
在這裡插入圖片描述