

递归:











class Solution{
private:
int maxSum=INT_MIN;
public:
int maxGain(TreeNode* node){
if(node==nullptr){
return 0;
}
//递归计算左右子节点的最大贡献值
//只有在最大贡献值大于0时,才会选取对应子节点
int leftGain=max(maxGain(node->left),0);
int rightGain=max(maxGain(node->right),0);
//节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
int priceNewpath=node->val+leftGain+rightGain;
//更新答案
maxSum=max(maxSum,priceNewpath);
//返回节点的最大贡献值
return node->val+max(leftGain,rightGain);
}
int maxPathSum(TreeNode* root){
maxGain(root);
return maxSum;
}
};
文章介绍了如何使用递归方法解决二叉树问题,计算每个节点的最大贡献值,并在给定根节点的情况下找到最大路径和。关键函数`maxGain`用于递归计算,最终`maxPathSum`返回整个树的最大路径和。
2638

被折叠的 条评论
为什么被折叠?



