124. 二叉树中的最大路径和

124. 二叉树中的最大路径和_第1张图片
124. 二叉树中的最大路径和_第2张图片
递归:
在这里插入图片描述
124. 二叉树中的最大路径和_第3张图片
124. 二叉树中的最大路径和_第4张图片
124. 二叉树中的最大路径和_第5张图片
124. 二叉树中的最大路径和_第6张图片
124. 二叉树中的最大路径和_第7张图片
124. 二叉树中的最大路径和_第8张图片
124. 二叉树中的最大路径和_第9张图片
124. 二叉树中的最大路径和_第10张图片
124. 二叉树中的最大路径和_第11张图片
124. 二叉树中的最大路径和_第12张图片

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;
	}
};

你可能感兴趣的:(c++)