题意:
在一颗二叉树中找一条路径,使其路径和最大。
解法:
dfs(root) 函数表示,root节点为路径起点(该节点必选)开始往下,求最大的路径和,路径拓展其实只有2中选择,走左边或者右边。那么取max( dfs(left) , dfs(right) )就行了。
但是,root节点也可能是路径的中间节点呀,也可能左右子树的路径可以拼接得到更大值。怎么办呢?
那么定义一个全局变量ans,每次同时考虑左右子树的最大路径和时,就和ans取max,就不会影响dfs()返回值的定义。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int ans=-100000;
int dfs(TreeNode* root)
{
if(root==NULL ) return -10000;
int pp=root->val;
int l=dfs(root->left);
int r=dfs(root->right);
int v=root->val;
v+=max(0,l);
v+=max(0,r);
ans=max(ans,v);
pp+=max(0,max(l,r));
return pp;
}
int maxPathSum(TreeNode* root) {
ans=max(ans,dfs(root));
return ans;
}
};