这道题是二叉树的一个典型的题目。
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6
.
需要注意的是,我们每次返回的是最大的左子树或者最长的右子树。另外也只返回对最大值有贡献的值才行,假如是负数,我们就忽略不算,只返回根节点。
通过递归来实现,代码实现如下:
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class Solution
{ public: int maxPathSum(TreeNode *root) { max_sum = INT_MIN; dfs(root); return max_sum; } private: int max_sum; int dfs( const TreeNode *root) { if(root == NULL) return 0; int l = dfs(root->left); int r = dfs(root->right); int sum = root->val; if(l > 0) sum += l; if(r > 0) sum += r; max_sum = max(max_sum, sum); return max(l, r) > 0 ? max(l, r) + root->val : root->val; } }; |