二叉树的最大路径和
描述
给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。
这个路径的开始节点和结束节点可以是二叉树中的任意节点
解题
二叉树
public class TreeNode {
int val;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val) {
this.val = val;
}
}
Solution
/**
* 计算最大路径的节点值和
*/
public class Solution {
int MAx=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root){
calculate(root);
return MAx;
}
public int calculate(TreeNode node){
if (node==null) return 0;
int left=0;
int right=0;
if (node.left!=null) left=calculate(node.left);
if (node.right!=null) right=calculate(node.right);
int sum=node.val;
if (left>0) sum+=left;
if (right>0) sum+=right;
MAx = Math.max(MAx,sum);
return Math.max(node.val,Math.max(left+node.val,right+node.val));//返回最大值
}
}