题目大意:在二叉树中找一条节点值的和最大的路径。这条路径呢可以跨越根节点(包括子树的根节点)
解法很简单,用递归,计算每个节点为根节点的路径和最大值,不停跟新,返回时返回一条从当前节点到叶子节点的和的最大值,用于父亲节点的计算。
AC代码如下
class Solution {
public:
int max=-10000000;
int find(TreeNode *root)
{
if(root==NULL)return 0;
int left=find(root->left);
if(left<0)left=0;
int right=find(root->right);
if(right<0)right=0;
if((left+right+root->val)>max)max=(right+left+root->val);
if(left>right)return left+root->val;
return right+root->val;
}
int maxPathSum(TreeNode *root) {
find(root);
return max;
}
};