📖 Scenario: You are working on a program that analyzes a binary tree representing a network of connected nodes. Each node has a value that can be positive or negative. Your task is to find the maximum sum of values along any path in the tree. A path can start and end at any node, but it must follow parent-child connections.
🎯 Goal: Build a Go program that creates a binary tree, sets a variable to track the maximum path sum, implements a recursive function to find the maximum path sum, and prints the final maximum path sum.
📋 What You'll Learn
Create a binary tree with the exact structure and values given
Create a variable called maxSum to track the maximum path sum
Write a recursive function called maxPathSumHelper that calculates the maximum path sum
Print the value of maxSum after processing the tree
💡 Why This Matters
🌍 Real World
Finding maximum path sums in trees is useful in network analysis, game development, and decision-making systems where the best route or combination needs to be found.
💼 Career
Understanding tree traversal and recursive algorithms is essential for software engineering roles, especially those involving data structures, algorithms, and system design.
Progress0 / 4 steps
1
Create the Binary Tree Structure
Create a struct type called TreeNode with fields Val int, Left *TreeNode, and Right *TreeNode. Then create the binary tree with root node value 1, left child 2, and right child 3. Assign the left child of node 2 to 4 and right child to 5. Assign the right child of node 3 to 6.
DSA Go
Hint
Define the TreeNode struct first. Then create nodes and link them as left and right children exactly as described.
2
Add a Variable to Track Maximum Path Sum
Inside the main function, create a variable called maxSum of type int and initialize it to the smallest possible integer value int(^uint(0) >> 1) * -1 - 1.
DSA Go
Hint
Use bitwise operations to get the smallest int value in Go and assign it to maxSum.
3
Implement Recursive Function to Find Maximum Path Sum
Write a recursive function called maxPathSumHelper that takes a pointer to TreeNode and a pointer to int called maxSum. The function returns an int. It should calculate the maximum path sum starting from the current node and update *maxSum if a larger path sum is found. Use the logic: calculate left and right max sums recursively, ignore negative sums by comparing with zero, update *maxSum with the sum of node value plus left and right max sums, and return the node value plus the maximum of left or right max sums.
DSA Go
Hint
Use recursion to find max sums from left and right children. Ignore negative sums by comparing with zero. Update *maxSum if current path sum is larger. Return max path sum including current node and one child.
4
Print the Maximum Path Sum
In the main function, after calling maxPathSumHelper, print the value of maxSum using fmt.Println(maxSum).
DSA Go
Hint
Use fmt.Println(maxSum) to print the maximum path sum after the recursive call.
Practice
(1/5)
1. What does the term Maximum Path Sum in a binary tree mean?
easy
A. The largest sum of values along any path between two nodes in the tree
B. The sum of all node values in the tree
C. The sum of values from root to the leftmost leaf
D. The smallest sum of values along any path in the tree
Solution
Step 1: Understand the path definition
The path can start and end at any two nodes, not necessarily root or leaf.
Step 2: Identify maximum sum meaning
We look for the path with the highest total sum of node values.
Final Answer:
The largest sum of values along any path between two nodes in the tree -> Option A
Quick Check:
Maximum path sum means highest sum between any two nodes [OK]
Hint: Maximum path sum is any path with highest total node values [OK]
Common Mistakes:
Thinking path must start at root
Confusing maximum path sum with total tree sum
Assuming path must end at leaf
2. Which of the following Go function signatures is correct for a function that calculates maximum path sum in a binary tree node defined as type TreeNode struct { Val int; Left, Right *TreeNode }?
easy
A. func maxPathSum(root *TreeNode) int
B. func maxPathSum(root TreeNode) int
C. func maxPathSum(root *TreeNode) *int
D. func maxPathSum(root *TreeNode) string
Solution
Step 1: Check parameter type
Function should accept pointer to TreeNode to avoid copying the whole tree.
Step 2: Check return type
Maximum path sum is an integer value, so return type should be int.
Final Answer:
func maxPathSum(root *TreeNode) int -> Option A
Quick Check:
Pointer input and int output for max path sum [OK]
Hint: Use pointer receiver and int return for tree max path sum [OK]
Common Mistakes:
Passing TreeNode by value causing copies
Returning pointer instead of int
Returning string instead of int
3. Given the following Go code snippet, what is the printed output?
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func maxPathSum(root *TreeNode) int {
maxSum := -1 << 31
var maxGain func(node *TreeNode) int
maxGain = func(node *TreeNode) int {
if node == nil {
return 0
}
leftGain := max(0, maxGain(node.Left))
rightGain := max(0, maxGain(node.Right))
priceNewPath := node.Val + leftGain + rightGain
if priceNewPath > maxSum {
maxSum = priceNewPath
}
return node.Val + max(leftGain, rightGain)
}
maxGain(root)
return maxSum
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
root := &TreeNode{Val: -10}
root.Left = &TreeNode{Val: 9}
root.Right = &TreeNode{Val: 20}
root.Right.Left = &TreeNode{Val: 15}
root.Right.Right = &TreeNode{Val: 7}
fmt.Println(maxPathSum(root))
}
medium
A. 27
B. 42
C. 35
D. 20
Solution
Step 1: Trace maxGain for each node
Calculate max gain from left and right subtree ignoring negatives:
- Node 9: maxGain = 9
- Node 15: maxGain = 15
- Node 7: maxGain = 7
- Node 20: maxGain = 20 + max(15,7) = 35
- Root -10: maxGain = -10 + max(9,35) = 25
Check maxSum updates:
- At node 9: maxSum = 9
- At node 15: maxSum = 15
- At node 7: maxSum = 15 (unchanged)
- At node 20: priceNewPath = 20 + 15 + 7 = 42, maxSum = 42
- At root: priceNewPath = -10 + 9 + 35 = 34 (maxSum stays 42)
Step 2: Return maxSum
maxSum is 42 after full traversal.
Final Answer:
42 -> Option B
Quick Check:
Max path sum = 42 [OK]
Hint: Add node value plus max gains from left and right, track max sum [OK]
Common Mistakes:
Not ignoring negative gains
Returning max gain instead of max path sum
Miscomputing path sums including negative nodes
4. The following Go function attempts to compute the maximum path sum in a binary tree but has a bug. What is the bug?
C. It does not ignore negative gains from left or right subtrees
D. It uses incorrect initial value for maxSum
Solution
Step 1: Analyze gain calculation
The function uses leftGain and rightGain directly without ignoring negative values, which can reduce the path sum.
Step 2: Identify fix
To fix, use max(0, leftGain) and max(0, rightGain) to ignore negative gains.
Final Answer:
It does not ignore negative gains from left or right subtrees -> Option C
Quick Check:
Negative gains must be ignored for correct max path sum [OK]
Hint: Always ignore negative subtree sums by max(0, gain) [OK]
Common Mistakes:
Not ignoring negative subtree sums
Wrong initial maxSum value
Returning before traversal completes
5. You want to find the maximum path sum in a binary tree where some nodes have negative values. Which approach correctly handles this scenario?
A) Use a recursive function that returns the maximum gain from each node, ignoring negative gains by taking max(0, gain), and update a global max sum including both left and right gains plus node value.
B) Use a recursive function that sums all node values and returns the total.
C) Use a breadth-first search to find the maximum node value and return it.
D) Use a recursive function that only considers paths from root to leaf nodes.
hard
A. Consider only root-to-leaf paths recursively
B. Sum all node values recursively and return total
C. Find maximum node value using BFS and return it
D. Use recursion with max(0, gain) and update max sum including both children
Solution
Step 1: Understand negative values impact
Negative node values can reduce path sums, so ignoring negative gains is necessary.
Step 2: Choose correct approach
Use recursion with max(0, gain) and update max sum including both children uses recursion with max(0, gain) to ignore negative paths and updates max sum considering both left and right children plus current node, which correctly finds maximum path sum anywhere in the tree.
Final Answer:
Use recursion with max(0, gain) and update max sum including both children -> Option D
Quick Check:
Ignore negative gains and consider all paths for max sum [OK]
Hint: Ignore negative gains and consider all paths recursively [OK]
Common Mistakes:
Summing all nodes ignoring path constraints
Only considering root-to-leaf paths
Returning max node value instead of path sum
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.