在最长路径中会有2类节点
当一个节点是A类节点时,正好可以将左边与右边连起来,最长路径是left+right+root->val
当一个节点是B类节点式,就只能取一边。最长路径是max(left,right)+root->val
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int res=INT_MIN;
int maxPathSum(TreeNode* root) {
getmax(root);
return res;
}
int getmax(TreeNode* root){
if(!root) return 0;
int left=max(getmax(root->left),0);
int right=max(getmax(root->right),0);
//以root为根节点的路径
res=max(res,root->val+left+right);
//以root节点的父节点为根节点的路径
return max(left,right)+root->val;
}
};