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;

	}
예제 #2
0
 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));
 }
예제 #3
0
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) );
}
예제 #4
0
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);
	}
예제 #6
0
   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;
}