解题思路: 主要抓住某一个结点,采取后续遍历的思想。 在返回值时,一个结点有三种情况:
- leftchild + rightchild + root-> val;
- leftchild + root->val;
- rightchild + root->val; 那么result的最大值就可能为上述三者中的最大值,依次执行后续遍历即可得出最优解。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int result = -1001;
int dfs(TreeNode* root){
if(root == NULL)
return 0;
int left = dfs(root->left);
int right = dfs(root->right);
int ll = left + root->val;
int rr = right + root->val;
result = max(result,left + right + root->val);
result = max(result,max(ll,rr));
result = max(root->val,result);
return (ll > rr ? (ll > root->val ? ll : root->val) : (rr > root->val ? rr : root->val));
}
int maxPathSum(TreeNode* root) {
if(root == NULL)
return 0;
dfs(root);
return result;
}
};