1、题目描述
输入一个二叉树,输出路径和最大的值,路径可以从任意节点开始到任意节点为止。
2、思路
DFS。
声明一个用来计算从根节点到叶子节点的路径和的最大值的函数findm,函数中传入一个变量ans,用于记录答案。
分别计算左子树和右子树的findm值l和r。若l或r小于0,则令其等于0.
若root-》val+l+r大于ans,则更新ans。
函数的返回值为root->val + max(l,r).
3、代码
int maxPathSum(TreeNode* root) {
int ans = INT_MIN;
findm(root,ans);
return ans;
}
int findm(TreeNode* root,int & ans){
if(!root) return 0;
int l = findm(root->left,ans);
int r = findm(root->right,ans);
if(l<0) l=0;
if(r<0) r=0;
int sum=root->val+l+r;
if(sum>ans) ans=sum;
return root->val + max(l,r);
}