描述
给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。
这个路径的开始节点和结束节点可以是二叉树中的任意节点
例如:
给出以下的二叉树,
返回的结果为6
想法:
一开始想利用dfs遍历一遍找出哪条线最大,又仔细读题,发现这个比较的是任意两个结点之间路径最大值。就利用一个全局变量,在每次递归时进行比较最大值。
public int res = Integer.MIN_VALUE;
public int maxPathSum (TreeNode root) {
getMax(root);
return res;
}
public int getMax(TreeNode root){
if(root == null) return 0;
int left = Math.max(0, getMax(root.left));
int right = Math.max(0, getMax(root.right));
res = Math.max(res,left + right + root.val);
return root.val + Math.max(left, right);
}