I'm posting my code for a LeetCode problem. If you'd like to review, please do so. Thank you for your time!
Problem
Given a non-empty binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
Example 1:
Input: [1,2,3]
1
/ \
2 3
Output: 6
Example 2:
Input: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
Output: 42
Inputs
[1,2,3]
[-10,9,20,null,null,15,7]
[-10,9,20,null,null,15,7,9,20,null,null,15,7]
[-10,9,20,null,null,15,7,9,20,null,null,15,720,null,null,15,7,9,20,null,null,15,7]
[-10,9,20,null,null,15,7,9,20,null,null,15,720,null,null,15,7,9,20,null,null,15,7999999,20,null,null,15,7,9,20,null,null,15,720,null,null,15,7,9,20,null,null,15,7]
Outputs
6
42
66
791
8001552
Code
#include <cstdint>
#include <algorithm>
struct Solution {
int maxPathSum(TreeNode* root) {
std::int_fast64_t sum = INT_FAST64_MIN;
depthFirstSearch(root, sum);
return sum;
}
private:
static std::int_fast64_t depthFirstSearch(
const TreeNode* node,
std::int_fast64_t& sum
) {
if (!node) {
return 0;
}
const std::int_fast64_t left = std::max(
(std::int_fast64_t) 0,
depthFirstSearch(node->left, sum)
);
const std::int_fast64_t right = std::max(
(std::int_fast64_t) 0,
depthFirstSearch(node->right, sum)
);
sum = std::max(sum, left + right + node->val);
return std::max(left, right) + node->val;
}
};