Skip to main content

Maximum Sum Path

Problem Statement:​

A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. Note that the path does not need to pass through the root.

The path sum of a path is the sum of the node's values in the path.

Given the root of a binary tree, return the maximum path sum of any non-empty path.

Example 1:

Input: root = [1,2,3]
Output: 6
Explanation: The optimal path is 2 -> 1 -> 3 with a path sum of 2 + 1 + 3 = 6.

Example 2:

Input: root = [-10,9,20,null,null,15,7]
Output: 42
Explanation: The optimal path is 15 -> 20 -> 7 with a path sum of 15 + 20 + 7 = 42.

  • Example:



✅ Solution: Postorder DFS (Max Path Sum via Recursion)​

class Solution {
public:
int findMaxPathSum(TreeNode *root, int &sum){
if(root == NULL) return 0;

// Only consider positive contributions; discard negatives
int leftMaxPath = max(0, findMaxPathSum(root->left, sum));
int rightMaxPath = max(0, findMaxPathSum(root->right, sum));

// Update global max: current node as the root of the path
sum = max(sum, leftMaxPath + rightMaxPath + root->val);

// Return max path sum including current node and one subtree
return root->val + max(leftMaxPath, rightMaxPath);
}

int maxPathSum(TreeNode* root) {
int sum = INT_MIN;
findMaxPathSum(root, sum);
return sum;
}
};


📝 How It Works​

  • This problem finds the maximum sum path between any two nodes in a binary tree.
  • At each node:
    • Compute the max path sum from left and right subtrees.
    • Ignore negative paths by using max(0, …) to avoid reducing total sum.
    • Update the global max (sum) with left + right + root->val (when the path goes through the current node).
  • Finally, return the maximum one-sided path sum that can be extended upwards (used in recursive return).

🧩 Key Formula​

// 1. Local sum at current node
sum = max(sum, left + right + root->val);

// 2. Return to parent only one side (left or right path)
return root->val + max(left, right);


⏱️ Time & Space Complexity​

MetricValue
⏱️ Time ComplexityO(n) — each node visited once
🪄 Space ComplexityO(h) — recursion stack (h = height)

⚠️ Edge Cases​

  • ✅ Tree with all negative nodes → picks the least negative node
  • ✅ Tree with one node → returns node value
  • ✅ Balanced and skewed trees → handled properly

💡 Other Approaches​

ApproachNotes
Brute ForceExponential, very inefficient
DFS with global tracking ✅Optimal, clean, used here


🚀 Level Up Your Engineering Mindset

Never Study in Isolation. Join Binary Dose.

Connect with fellow engineers, clear conceptual doubts, and get 2 visual breakdowns & engineering mental models daily across our community channels.

Discord
Official Hub

Discord Community

Start at #welcome-and-rules, say hello in #general-chat, clear doubts, and collaborate with engineers worldwide.

Join Discord Server→
⚡
Daily Knowledge Drops

Daily Visual Deep-Dives

Bite-sized system design schematics, core OS internals, and DSA intuition served right into your feeds every single day.

💡Have handwritten notes, cheat-sheets, or want to publish a technical article?
Learn How to Contribute→