二叉树的最大路径和
OJ 地址:二叉树的最大路径和
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
int maxPath(TreeNode *node, int &maxSum)
{
if(node == nullptr)
return 0;
// 只有在最大贡献值大于0的时候,才会选取对应子节点
int left = max(maxPath(node->left, maxSum), 0);
int right = max(maxPath(node->right, maxSum), 0);
// 节点的最大路径和取决于该节点与该节点的左右子节点的最大贡献值
int priceNewPath = node->val + left + right;
// 更新答案
maxSum = max(maxSum, priceNewPath);
// 返回节点的最大贡献值
return node->val + max(left, right);
}
int maxPathSum(TreeNode* root) {
if(root == nullptr)
return 0;
int maxSum = INT_MIN;
maxPath(root, maxSum);
return maxSum;
}
};