Bird
Raised Fist0
DSA Javascriptprogramming~10 mins

Maximum Path Sum in Binary Tree in DSA Javascript - Execution Trace

Choose your learning style10 modes available
Concept Flow - Maximum Path Sum in Binary Tree
Start at root node
↓
Calculate max path sum from left subtree
↓
Calculate max path sum from right subtree
↓
Calculate max path including current node
↓
Update global max if current path sum is higher
↓
Return max path sum for one side + current node
↓
Repeat for all nodes
↓
Final max path sum stored globally
We visit each node, calculate max path sums from left and right children, update global max path sum including current node, and return max sum for one side to parent.
Execution Sample
DSA Javascript
function maxPathSum(root) {
  let maxSum = -Infinity;
  function dfs(node) {
    if (!node) return 0;
    let left = Math.max(dfs(node.left), 0);
    let right = Math.max(dfs(node.right), 0);
    maxSum = Math.max(maxSum, left + right + node.val);
    return Math.max(left, right) + node.val;
  }
  dfs(root);
  return maxSum;
}
This code finds the maximum path sum in a binary tree by recursively calculating max sums from children and updating a global max.
Execution Table
StepOperationNode VisitedLeft MaxRight MaxCurrent Max PathGlobal MaxReturn ValueVisual State
1Visit node10N/AN/AN/A-InfinityN/A10
2Visit node2N/AN/AN/A-InfinityN/A2
3Calculate left max20022210 -> 2
4Visit node102N/AN/A2N/A10
5Visit node10210N/A2N/A10 -> 2, 10
6Calculate max path1021022222010 -> 2, 10
7Visit node-25N/AN/AN/A22N/A10 -> 2, 10
8Visit node3N/AN/AN/A22N/A10 -> 2, 10
9Calculate left max300322310 -> 2, 10
10Visit node-253N/AN/A22N/A10 -> 2, 10
11Visit node4N/AN/AN/A22N/A10 -> 2, 10
12Calculate right max-2534-1822-1810 -> 2, 10
13Calculate max path-2534-1822-1810 -> 2, 10
14Return to parent-2534-1822-1810 -> 2, 10
15Calculate max path1021022222010 -> 2, 10
16Update global max1021022222010 -> 2, 10
17Return to root1021022222010 -> 2, 10
18Final max path sumrootN/AN/AN/A22N/A10 -> 2, 10
💡 All nodes visited, global max path sum is 22
Variable Tracker
VariableStartAfter Step 3After Step 9After Step 12After Step 16Final
maxSum-Infinity222222222
leftN/A00322
rightN/A0041010
returnValueN/A23-182020
Key Moments - 3 Insights
Why do we use Math.max(dfs(node.left), 0) instead of just dfs(node.left)?
Because negative path sums reduce the total, we ignore them by taking max with 0. See execution_table rows 3 and 9 where left or right max is 0 instead of negative.
Why do we update global max with left + right + node.val?
Because the max path can pass through the current node connecting left and right subtrees. This is shown in execution_table row 6 where global max is updated with sum including both sides.
What does the return value of dfs represent?
It represents the max path sum for one side plus current node to be used by parent. It never includes both sides to avoid double counting. See returnValue column in execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the global max path sum?
A10
B12
C22
D-Infinity
💡 Hint
Check the Global Max column at step 6 in execution_table
At which step does the left max path sum for node with value 3 get calculated?
AStep 9
BStep 3
CStep 12
DStep 16
💡 Hint
Look at the Left Max column and Node Visited column in execution_table
If we remove Math.max(..., 0) and allow negative sums, how would the global max change?
AIt would stay the same
BIt could decrease because negative paths reduce sums
CIt would always increase
DIt would cause an error
💡 Hint
Refer to key_moments about ignoring negative sums and execution_table rows where 0 replaces negatives
Concept Snapshot
Maximum Path Sum in Binary Tree:
- Visit each node recursively
- Calculate max path sum from left and right children (ignore negatives)
- Update global max with left + right + node value
- Return max path sum for one side + node value
- Final global max is answer
Full Transcript
This visualization shows how to find the maximum path sum in a binary tree. We start at the root and recursively visit each node. For each node, we calculate the maximum path sum from its left and right children, ignoring negative sums by taking the maximum with zero. We then update a global maximum path sum if the sum of left max, right max, and the current node's value is greater than the current global max. The function returns the maximum path sum for one side plus the current node's value to its parent. This process repeats for all nodes, and the final global max is the maximum path sum in the tree.

Practice

(1/5)
1. What does the "Maximum Path Sum in Binary Tree" problem ask you to find?
easy
A. The sum of all node values in the tree
B. The longest path length in the binary tree
C. The highest sum of values along any path between two nodes in the tree
D. The maximum value of a single node in the tree

Solution

  1. Step 1: Understand the problem definition

    The problem asks for the maximum sum of node values along any path in the binary tree. A path can start and end at any nodes, but must be connected.
  2. Step 2: Differentiate from other path problems

    This is not about longest path length or total sum of all nodes, but the maximum sum of values on any path.
  3. Final Answer:

    The highest sum of values along any path between two nodes in the tree -> Option C
  4. Quick Check:

    Maximum path sum = highest sum path [OK]
Hint: Focus on sum of connected nodes, not length or single node [OK]
Common Mistakes:
  • Confusing maximum path sum with longest path length
  • Thinking path must start at root
  • Summing all nodes instead of a path
2. Which of the following is the correct base case return value for a recursive function computing maximum path sum in a binary tree node when the node is null?
easy
A. -Infinity
B. 1
C. null
D. 0

Solution

  1. Step 1: Consider the meaning of base case for null node

    When the node is null, the maximum gain from this subtree is 0 (choose not to extend path here).
  2. Step 2: Why not others?

    -Infinity works only with Math.max(0, result) but 0 is standard and cleaner. Returning 0 allows proper clamping in parent. null or 1 cause type/math errors.
  3. Final Answer:

    0 -> Option D
  4. Quick Check:

    Base case for null = 0 [OK]
Hint: Return 0 for null to represent zero contribution [OK]
Common Mistakes:
  • Returning -Infinity without Math.max(0, ·)
  • Returning null causing type errors
  • Returning positive values skewing max
3. What is the output of the following code snippet for maximum path sum?
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

function maxPathSum(root) {
  let maxSum = -Infinity;
  function dfs(node) {
    if (!node) return 0;
    let left = Math.max(dfs(node.left), 0);
    let right = Math.max(dfs(node.right), 0);
    maxSum = Math.max(maxSum, node.val + left + right);
    return node.val + Math.max(left, right);
  }
  dfs(root);
  return maxSum;
}

const root = new TreeNode(-10, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7)));
console.log(maxPathSum(root));
medium
A. 42
B. 35
C. 27
D. 20

Solution

  1. Step 1: Trace dfs on left subtree

    Left child 9: left=0, right=0, maxSum = 9, returns 9.
  2. Step 2: Trace dfs on right subtree

    dfs(15)=15 updates maxSum=15; dfs(7)=7 keeps 15; at 20: left=15, right=7, maxSum = max(15, 20+15+7=42)=42, returns 20+15=35.
  3. Step 3: Calculate root node max sum

    Root: left=9, right=35, path sum -10+9+35=34 <42, maxSum remains 42.
  4. Final Answer:

    42 -> Option A
  5. Quick Check:

    Max path sum = 42 [OK]
Hint: Add node + max(left, right) and update maxSum with both sides [OK]
Common Mistakes:
  • Not ignoring negative sums by using Math.max with 0
  • Adding left and right children incorrectly
  • Confusing return value with maxSum update
4. Identify the bug in this maximum path sum function and select the fix:
function maxPathSum(root) {
  let maxSum = -Infinity;
  function dfs(node) {
    if (!node) return -Infinity;
    let left = dfs(node.left);
    let right = dfs(node.right);
    maxSum = Math.max(maxSum, node.val + left + right);
    return node.val + Math.max(left, right);
  }
  dfs(root);
  return maxSum;
}
medium
A. Add check to ignore negative sums with Math.max(left, 0)
B. Change base case return from -Infinity to 0
C. Initialize maxSum to 0 instead of -Infinity
D. Return maxSum inside dfs instead of outside

Solution

  1. Step 1: Analyze base case and recursive calls

    Returning -Infinity for null nodes causes left and right to be -Infinity, which breaks addition and max calculations.
  2. Step 2: Fix by ignoring negative sums

    Use Math.max(dfs(node.left), 0) and Math.max(dfs(node.right), 0) to ignore negative paths and avoid incorrect sums.
  3. Final Answer:

    Add check to ignore negative sums with Math.max(left, 0) -> Option A
  4. Quick Check:

    Ignore negative sums with Math.max(..., 0) [OK]
Hint: Ignore negative child sums by max with 0 to fix bugs [OK]
Common Mistakes:
  • Returning -Infinity breaks addition
  • Not ignoring negative sums from children
  • Changing maxSum initialization wrongly
5. Given a binary tree where some nodes have negative values, how would you modify the maximum path sum algorithm to handle the case where all values are negative?
hard
A. Allow paths to be empty and return 0 if all sums are negative
B. Track the maximum single node value separately and compare with path sums
C. Use Math.max with 0 on child sums to ignore negatives
D. Initialize maxSum to -Infinity and do not ignore negative child sums

Solution

  1. Step 1: Understand all-negative case

    The max path sum is the highest (least negative) single node value. Paths must include at least one node.
  2. Step 2: Key modification

    Tracking the maximum single node value separately ensures that if all child sums are negative, the algorithm still returns the maximum node value. Using Math.max(0, dfs(child)) ignores negative child sums but can miss the max single node if all are negative.
  3. Final Answer:

    Track the maximum single node value separately and compare with path sums -> Option B
  4. Quick Check:

    Separate max node tracking handles all-negative correctly [OK]
Hint: Track max single node separately to handle all-negative cases [OK]
Common Mistakes:
  • Allowing empty path return 0 (invalid)
  • Not tracking max node separately (misses max negative node)
  • Not ignoring negative child sums (misses single nodes)
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard