/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int res = INT32_MIN;
int dfs(TreeNode* root){
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
res = max(res, root->val); //判断叶子节点
return root->val;
}
int leftValue = dfs(root->left);
int rightValue = dfs(root->right);
int maxv = max(leftValue + root->val, rightValue + root->val);
res = max(res, maxv);//判断左/右节点 + 当前节点
res = max(res, root->val);//判断遍历的当前节点
res = max(res, leftValue + rightValue + root->val);//判断左节点 + 右节点 + 当前节点
return maxv;
}
int maxPathSum(TreeNode* root) {
res = INT32_MIN;
dfs(root);
return res;
}
};