/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @return int整型 */ int ans = INT32_MIN; int maxPathSum(TreeNode* root) { // write code here calculate(root); return ans; } int calculate(TreeNode* root) { // 计算经过当前节点的最大路径和 if(root==nullptr) { return 0; } int left = 0; int right = 0; if(root->left) { left = calculate(root->left); } if(root->right) { right = calculate(root->right); } int val = root->val; if(left>0) { val+=left; } if(right>0) { val+=right; } ans= max(ans,val); return max(root->val,max(root->val+left,root->val+right)); // 因为只是一边的最大值 } };