Hard
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.
Constraints:
[1, 3 * 104]
.-1000 <= Node.val <= 1000
To solve the “Binary Tree Maximum Path Sum” problem in Java with a Solution
class, we’ll use a recursive approach. Below are the steps:
Create a Solution
class: Define a class named Solution
to encapsulate our solution methods.
Create a maxPathSum
method: This method takes the root node of the binary tree as input and returns the maximum path sum.
maxSumPath
to compute the maximum path sum rooted at the current node.
Initialize a variable to store the maximum path sum: Initialize a global variable maxSum
to store the maximum path sum.
Call the helper method: Call the maxSumPath
method with the root node.
maxSum
.Here’s the Java implementation:
class Solution {
int maxSum = Integer.MIN_VALUE; // Initialize global variable to store maximum path sum
public int maxPathSum(TreeNode root) {
maxSumPath(root);
return maxSum; // Return maximum path sum
}
// Recursive helper method to compute maximum path sum rooted at current node
private int maxSumPath(TreeNode node) {
if (node == null) return 0; // Base case
// Compute maximum path sum for left and right subtrees recursively
int leftSum = Math.max(maxSumPath(node.left), 0); // Ignore negative sums
int rightSum = Math.max(maxSumPath(node.right), 0); // Ignore negative sums
// Update maximum path sum by considering three cases:
// 1. Current node itself
// 2. Current node + maximum path sum of left subtree
// 3. Current node + maximum path sum of right subtree
int currentSum = node.val + leftSum + rightSum;
maxSum = Math.max(maxSum, currentSum); // Update global maximum path sum
// Return the maximum path sum that can be obtained from the current node to any of its descendants
return node.val + Math.max(leftSum, rightSum);
}
// Definition for a binary tree node
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
}
This implementation follows the steps outlined above and efficiently computes the maximum path sum in a binary tree in Java.