题目链接:click~
/*题意:给定一颗二叉树,求最大路径和。路径可以从任意结点开始,任意结点结束*/
/**
*思路: 对于每个结点,需要比较三个值
* 1)左子结点为结尾的路径和+当前结点值
* 2)右子结点为结尾的路径和+当前结点值
* 3)当前结点值
*
* 计算以当前结点为根时最大路径和:
* 1)左子结点为结尾的路径和+当前结点值
* 2)右子结点为结尾的路径和+当前结点值
* 3)当前结点值
* 4)左子结点为结尾的路径和+当前结点值+右子结点为结尾的路径和
*/
class Solution {
public:
int getMaxSum(TreeNode *root, int& maxSum) {
if(root == NULL) return 0;
int leftSum = getMaxSum(root->left, maxSum); //左子结点为结尾的路径和
int rightSum = getMaxSum(root->right, maxSum);//右子结点为结尾的路径和
//分别对应1)、2)、3)、
int curSum = max(max(root->val+leftSum, root->val+rightSum), root->val);
//计算最大值
maxSum = max(maxSum, max(curSum, root->val+leftSum+rightSum));
return curSum;
}
int maxPathSum(TreeNode *root) {
if(root == NULL) return 0;
int maxSum = -0xfffffff;
getMaxSum(root, maxSum);
return maxSum;
}
};