LeetCode算法网站算法题
https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/
class Solution
{
private:
int res=INT_MIN;
int DFS(TreeNode*p)
{
if(p==nullptr)
{
return 0;
}
int leftGive=max(DFS(p->left),0);//计算当前节点的左子树最大贡献值
int rightGive=max(DFS(p->right),0);//计算当前节点的右子树最大共贡献值
//计算以当前节点为构成最大路径的根节点(这种时候有两种情况:
//1.当前节点到其一个子节点
//2.或者其左子树的一个节点经过当前节点到其右子树的一个节点)时,最大路径的长度
int view=leftGive+rightGive+(p->val);
//更新最大路径
res=max(res,view);
//返回当前节点的最大贡献值,方便当前节点之后的节点使用
return max((p->val)+leftGive,(p->val)+rightGive);
}
public:
int maxPathSum(TreeNode* root)
{
DFS(root);
return res;
}
};