124二叉树中的最大路径和
在树中,每个节点都可以看做是一颗以该节点为根的子树,同时又作为其他根的子节点(根节点除外),因此,只需单独讨论两种情况。
当A作为根节点的时候,最大值为B-A-C
当A作为子节点的时候,最大值为Max(B, C) + A
注:当子节点小于0时,则舍弃该节点
/**
* 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 ans = Integer.MIN_VALUE;
public int findMax(TreeNode root){
if (root == null) return 0;
// 若当前节点的左右子树的最大值小于0,则舍弃,即置0
int left = Math.max(0, findMax(root.left));
int right = Math.max(0, findMax(root.right));
// 计算以当前节点作为根节点的最大值
ans = Math.max(ans, left + right + root.val);
// 返回该节点作为子节点的最大值
return Math.max(left, right) + root.val;
}
public int maxPathSum(TreeNode root) {
findMax(root);
return ans;
}
}