124. Binary Tree Maximum Path Sum
Hard
2263182FavoriteShare
Given a non-empty binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
Example 1:
Input: [1,2,3] 1 / \ 2 3 Output: 6
Example 2:
Input: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 Output: 42
Accepted
247,335
Submissions
781,721
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int res=INT_MIN;
int maxPathSum(TreeNode* root){
postra(root);
return res;
}
int postra(TreeNode* root){//以当前节点为终点的左路径或者右路径中的最大值
if(root==NULL) return 0;
int lf=max(postra(root->left),0);
int rt=max(postra(root->right),0);
int cur=root->val;
if(lf>0) cur+=lf;
if(rt>0) cur+=rt;
if(res<cur) res=cur;//记录全局最大值
//上面四行代码是计算全局最优,其他几行代码计算以当前节点为终点的最大值
return max(lf,rt)+root->val;
}
};