/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int ret = INT_MIN;
int GetNodeMax(TreeNode* Node){
if(Node == nullptr)
return 0;
int left = max(0, GetNodeMax(Node->left));
int right = max(0, GetNodeMax(Node->right));
//这里记录的是当前节点的最大路径和
//会不断进行更新
ret = max(ret, Node->val+left+right);
//提供当前节点所能提供的最大路径值:
//要么是左边路径 要么是右边路径
return Node->val + max(left, right);
}
int maxPathSum(TreeNode* root) {
//思路:记录两个值
//1.当前节点所能提供的最大路径值
//2.当前节点的最大路径和
//要注意区分这两个值的含义,例如示例1:
//节点1所能向上提供的最大路径值要么是2->1这条路径要么是3->1这条路径,注意向上这个词
//而节点1的最大路径和肯定是左边的路径加右边的路径
GetNodeMax(root);
return ret;
}
};