/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @return int整型 */ int res = INT_MIN; int maxPathSum(TreeNode* root) { // write code here getmax(root); return res; } int getmax(TreeNode* root){ if(!root) return 0; int leftmax = max(0,getmax(root->left)); int rightmax = max(0,getmax(root->right)); //前面的是全是正数的情况,自然就是全部相加,然后如果遇到了负数,那此层三个局部最大那必然是最大的哪一个相加 res = max(res,max(root->val+leftmax+rightmax, root->val + max (leftmax,rightmax))); //本层只需要返回这个节点加左右根最大值的最大值 return max(leftmax,rightmax) + root->val; } };