標籤:style blog http color width art
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.
For each node like following, there should be four ways existing for max path:
1. Node only
2. L-sub + Node
3. R-sub + Node
4. L-sub + Node + R-sub
注意:函數返回時返回的是left+node, node, right+node中較大的值。而計算全域最大是比較以當前node為根的樹和(left+right+node,node, left+node,right+node)之前記錄的最大值。
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 int maxPathSum(TreeNode *root) {13 if (root==NULL)return 0;14 int max_sum=INT_MIN;15 pathSum(root,max_sum);16 return max_sum;17 18 }19 int pathSum(TreeNode* root, int& max_sum)20 {21 if(root==NULL)return 0;22 int sum=root->val;23 int left=pathSum(root->left,max_sum);24 sum=max(sum,sum+left);25 int right=pathSum(root->right,max_sum);26 sum=max(sum,sum+right);27 max_sum=max(sum,max_sum);28 return max(root->val,max(left+root->val,right+root->val));//important29 }30 };