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
.
对于每个结点,我们需要比较三个值。
- 左结点为结尾的路径和+当前结点值
- 右结点为结尾的路径和+当前结点值
- 当前结点值
取这个三个值作为以当前节点为结尾的最大路径和返回。
同时获取以当前结点为根的子树的最大路径和,其子树最大路径来源于
- 以当前结点为结尾的最大路径和(也就是上面结点所述的值)
- 左节点为结尾的路径和+当前结点值+右结点为结尾的路径和
- 左子树的最大路径和
- 右子树的最大路径和
取其4个值中得最大值作为子树的最大路径和。
class Solution { public: int maxSum = INT_MIN; int getMaxSum(TreeNode* root){ if(root == NULL) return 0; int leftSum = getMaxSum(root->left), rightSum = getMaxSum(root->right); int curSum = max(root->val, max(root->val+leftSum, root->val+rightSum)); maxSum = max(maxSum,max(curSum,root->val+leftSum+rightSum)); return curSum; } int maxPathSum(TreeNode *root){ getMaxSum(root); return maxSum; } };