给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
递归计算法
确定计算代价的公式:从该点开始(起点)的最大路径。
递归计算从该点开始(起点)的最大路径,并设置终止条件node = null则返回0。
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x; }
}
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
maxSum(root);
return max;
}
public int maxSum(TreeNode root) {
if(root == null){
return 0;
}
int leftMax = maxSum(root.left);//以左孩子为起点的最大路径
int rightMax = maxSum(root.right);//以右孩子为起点的最大路径
int res;
// 以某点为起点的最大值,需要考虑leftMax,rightMax小于0的情况
res = Math.max(Math.max(leftMax,rightMax)+ root.val,root.val);
// 计算当前最大路径
max = Math.max(max,Math.max(res,root.val+rightMax+leftMax));
return res;
}