【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;
    }
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/84847504