题目描述
解题思路:后序遍历,先计算左右子树各自的最大值,进而得到该节点的最大值,与全局变量max做比较,并保存,返回该节点到叶子节点的最大值(亮点)。
解题代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
getMax(root);
return max;
}
public int getMax(TreeNode root){
if(root == null){
return 0;
}
int left = Math.max(getMax(root.left),0);
int right = Math.max(getMax(root.right),0);
max = Math.max(max, left + right + root.val);
return root.val + Math.max(left, right);//亮点,使用了max
}
}