Leetcode 124 Solution

This article provides solution to leetcode question 124 (binary-tree-maximum-path-sum)

https://leetcode.com/problems/binary-tree-maximum-path-sum

Solution

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void maxPathSum(TreeNode* root, int& maxRootValue, int& maxValue)
    {
        if (root == NULL)
        {
            maxRootValue = 0;
            return;
        }

        int leftMaxRootValue, rightMaxRootValue;

        maxPathSum(root->left, leftMaxRootValue, maxValue);
        maxPathSum(root->right, rightMaxRootValue, maxValue);

        if (maxValue < root->val + leftMaxRootValue + rightMaxRootValue)
            maxValue = root->val + leftMaxRootValue + rightMaxRootValue;

        maxRootValue = max(root->val + max(leftMaxRootValue, rightMaxRootValue), 0);
    }

    int maxPathSum(TreeNode* root) {
        int maxRootValue;
        int maxValue = INT_MIN;

        maxPathSum(root, maxRootValue, maxValue);

        return maxValue;
    }
};