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; } };