看似简单,但是为什么用数组做递归维护最高值,每个递归返回的是什么值? 当前node的最大值,包括1,node.val 2 node.left .max+ node.val 3 node.right.max + node.val
值得学习
ref
http://blog.csdn.net/fightforyourdream/article/details/16894069
http://www.cnblogs.com/springfor/p/3886411.html
public class Solution {
public int maxPathSum(TreeNode root) {
// http://www.cnblogs.com/springfor/p/3886411.html
// 用数组传递的方式随时保存最大值
if(root==null) return 0;
int[] max = new int[1];
max[0] = Integer.MIN_VALUE;
findmax(max,root);
return max[0];
}
public int findmax(int[] max, TreeNode root){
if(root==null) return 0;
int L = findmax(max, root.left);
int R = findmax(max, root.right);
// int res = Math.max(root.val, Math.max(root.val+L, root.val+R));
int tmp = Math.max(root.val,Math.max(root.val+L, root.val+R));
max[0] = Math.max(max[0],Math.max(root.val+L+R,tmp));
// return max[0]; // 错在这里咯!到底返回的是什么?
return tmp;
}
}