key:
1.递归,每次返回当前节点作为父节点到任意子节点之间的最大距离。
2.最大距离的评判标准:max(res,sum),其中 sum表示当前节点作为父节点时,任意子节点之间的距离和。
int res;
int maxPathSum(TreeNode *root) {
if(!root) return 0;
res = INT_MIN;
dfs(root);
return res;
}
int dfs(TreeNode *root){
if(!root) return 0;
int sum = root->val;
int left = dfs(root->left);
int right = dfs(root->right);
if(left>0) sum+=left;
if(right>0) sum+=right;
res = max(res,sum);
int temp = max(left,right);
return temp>0? temp+root->val: root->val;
}