int maxPathSumHelper(TreeNode * node, int &curMax) { if (!node) return INT_MIN; int cur = node->val; int left = maxPathSumHelper(node->left,curMax); int right = maxPathSumHelper(node->right,curMax); int maxSubTree = (left < right?right:left); // get max of // any sub tree and current node // left-node-right // return cur + maxSubTree if (node->val > curMax) curMax = node->val; if (left > curMax) curMax = left; if (right > curMax) curMax = right; if (node->left) cur += left; if (node->right) cur += right; if (cur > curMax) curMax = cur; cur = node->val; if (maxSubTree > 0) cur += maxSubTree; return cur; }
void maxPathSumHelper(TreeNode *node, int &csum, int &maxsum) { if (!node) { csum = 0; return; } int lsum = 0, rsum = 0; maxPathSumHelper(node->left, lsum, maxsum); maxPathSumHelper(node->right, rsum, maxsum); csum = max(node->val, max(node->val + lsum, node->val + rsum)); maxsum = max(maxsum, max(csum, node->val + lsum + rsum)); }
void maxPathSumHelper (Node* node, int& csum, int& maxsum) { if (!node) { csum = 0; return; } int lsum = 0, rsum = 0; //get the left tree max maxPathSumHelper (node->left, lsum, maxsum); //get the right tree max maxPathSumHelper (node->right, rsum, maxsum); //get the bigger one of left or right tree, Note that the first comparison is needed if there are negative nodes in the tree csum = std::max (node->val, std::max (node->val + lsum, node->val + rsum) ); //if the tree go throuh a root, there is a potential max sum too maxsum = std::max (maxsum, std::max (csum, node->val + lsum + rsum) ); }
int maxPathSum (Node* root) { int csum = 0; int maxsum = -1; maxPathSumHelper (root, csum, maxsum); return maxsum; }
int maxPathSum(TreeNode *root) { if(!root) return 0; int curMax = INT_MIN; int sum = maxPathSumHelper(root, curMax); return max(sum,curMax); }
int maxPathSum(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function int csum; int maxsum = INT_MIN; maxPathSumHelper(root, csum, maxsum); return maxsum; }
int maxPathSum(TreeNode *root) { int csum; int maxSum = INT32_MIN; maxPathSumHelper(root, csum, maxsum); return maxSum; }