Leetcode Top Interview โœจ
GithubLinkedinXOfficial Website
  • Leetcode Top Interview ๐ŸŽฏ
  • Guide to Calculating Algorithm Complexity ๐Ÿš€
  • Topic 1 Array - String
    • 88. Merge Sorted Arrays ๐Ÿงฉ
    • 27. Remove Element ๐Ÿงน
    • 26. Remove Duplicates from Sorted Array ๐Ÿšซ
    • 80. Remove Duplicates from Sorted Array II ๐Ÿšซ๐Ÿšซ
    • 169. Majority Element ๐Ÿ‘‘
    • 189. Rotate Array ๐Ÿ”„
    • 121. Best Time to Buy and Sell Stock ๐Ÿ“ˆ
    • 122. Best Time to Buy and Sell Stock II ๐Ÿ“ˆ๐Ÿ’ฐ
    • 55. Jump Game ๐Ÿƒโ€โ™‚๏ธ
    • 45. Jump Game II ๐Ÿƒโ€โ™‚๏ธ
    • 274. H-Index ๐Ÿ“Š
    • 380. Insert Delete GetRandom O(1) ๐ŸŽฒ
    • 238. Product of Array Except Self ๐Ÿ”„
    • 134. Gas Station โ›ฝ
    • 135. Candy ๐Ÿฌ
    • 42. Trapping Rain Water ๐ŸŒง๏ธ
    • 13. Roman to Integer ๐Ÿ”ข
    • 018 Integer to Roman
    • 58. Length of Last Word ๐Ÿ” 
    • 14. Longest Common Prefix ๐ŸŒฑ
    • 151. Reverse Words in a String ๐Ÿ”„
    • 6. Zigzag Conversion ๐Ÿ”€
    • 28. Find the Index of the First Occurrence in a String ๐Ÿ”„
    • 68. Text Justification ๐Ÿ”„
  • Topic 2 Two Pointers
    • 125. Valid Palindrome ๐Ÿšฆ
    • 392. Is Subsequence ๐Ÿ“
    • 167. Two Sum II - Input Array Is Sorted ๐Ÿ”
    • 11. Container With Most Water ๐Ÿž๏ธ
    • 15. 3Sum ๐ŸŒ
  • Topic 3 Sliding Window
    • 209. Minimum Size Subarray Sum ๐ŸŒ
    • 3. Longest Substring Without Repeating Characters ๐ŸŒ
    • 30. Substring with Concatenation of All Words ๐ŸŒ
    • 76. Minimum Window Substring ๐ŸŒ
  • Topic 4 Matrix
    • 36. Valid Sudoku ๐ŸŒ
    • 54. Spiral Matrix ๐ŸŒ
    • 48. Rotate Image ๐Ÿ”„
    • 73. Set Matrix Zeroes
    • 289. Game of Life ๐Ÿ–ผ๏ธ
  • Topic 5 Hashmap
    • 383. Ransom Note ๐Ÿ”
    • 205. Isomorphic Strings ๐Ÿ”
    • 290. Word Pattern ๐Ÿงฉ
    • 242. Valid Anagram ๐ŸŽข
    • 49. Group Anagrams ๐Ÿคนโ€โ™‚๏ธ
    • 1. Two Sum ๐Ÿ”
    • 202. Happy Number ๐Ÿคฉ
    • 219. Contains Duplicate II ๐Ÿ”
    • 128. Longest Consecutive Sequence ๐Ÿ”
  • Topic 6 Intervals
    • 228. Summary Ranges ๐Ÿ“Š
    • 56. Merge Intervals ๐Ÿ”€
    • 57. Insert Interval ๐Ÿ†•
    • 452. Minimum Number of Arrows to Burst Balloons ๐ŸŽˆ
  • Topic 7 Stack
    • 20. Valid Parentheses ๐Ÿ”
    • 71. Simplify Path ๐Ÿ—บ๏ธ
    • 155. Min Stack ๐Ÿ—ƒ๏ธ
    • 150. Evaluate Reverse Polish Notation ๐Ÿง ๐Ÿ’ป
    • 224. Basic Calculator ๐Ÿงฎ
  • Topic 8 Linked List
    • 141. Linked List Cycle ๐Ÿ”
    • 2. Add Two Numbers ๐Ÿ”ข
    • 21. Merge Two Sorted Lists ๐Ÿ”—
    • 138. Copy List with Random Pointer ๐Ÿ”—
    • 92. Reverse Linked List II ๐Ÿ”„
      • Letโ€™s explain step by step ๐Ÿ‡
    • 25. Reverse Nodes in k-Group ๐Ÿ”„
    • 19. Remove Nth Node From End of List ๐Ÿ—‘๏ธ
    • 82. Remove Duplicates from Sorted List II โŒ๐Ÿ”ข
    • 61. Rotate List ๐Ÿ”„
    • 86. Partition List ๐Ÿ”—
    • 146. LRU Cache ๐Ÿ”—
  • Topic 9 Binary Tree General
    • 104. Maximum Depth of Binary Tree ๐Ÿ”—
    • 100. Same Tree ๐Ÿ”—
    • 226. Invert Binary Tree ๐Ÿ”—
    • 101. Symmetric Tree ๐Ÿ”—
    • 105. Construct Binary Tree from Preorder and Inorder Traversal ๐Ÿ”—
    • 106. Construct Binary Tree from Inorder and Postorder Traversal ๐Ÿ”—
    • 117. Populating Next Right Pointers in Each Node II ๐Ÿ”—
    • 114. Flatten Binary Tree to Linked List ๐Ÿ”—
    • 112. Path Sum ๐Ÿ”—
    • 129. Sum Root to Leaf Numbers ๐Ÿ”—
      • What_is_DFS
    • 124. Binary Tree Maximum Path Sum ๐Ÿ”—
Powered by GitBook
On this page
  • Problem Statement ๐Ÿ“œ
  • Examples ๐ŸŒŸ
  • Constraints โš™๏ธ
  • Solution ๐Ÿ’ก
  • Java Solution
  • Explanation of the Solution
  • Time Complexity โณ
  • Space Complexity ๐Ÿ’พ
  • Follow-up Challenges ๐Ÿง

Was this helpful?

  1. Topic 9 Binary Tree General

124. Binary Tree Maximum Path Sum ๐Ÿ”—

PreviousWhat_is_DFS

Last updated 3 months ago

Was this helpful?

Difficulty: Hard - Tags: Binary Tree, Dynamic Programming, Depth-First Search (DFS)


Problem Statement ๐Ÿ“œ

A path in a binary tree is a sequence of nodes where:

  1. Each pair of adjacent nodes in the sequence is connected by an edge.

  2. A node can only appear in the sequence at most once.

  3. The path does not need to pass through the root.

The path sum of a path is the sum of the node values along the path.

Task:

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


Examples ๐ŸŒŸ

๐Ÿ”น 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 โš™๏ธ

  • The number of nodes in the tree is in the range [1, 30,000].

  • -1000 <= Node.val <= 1000


Solution ๐Ÿ’ก

The solution involves:

  1. Using Depth-First Search (DFS) to explore the tree.

  2. At each node, calculate:

    • The maximum path sum that can be extended to its parent.

    • The maximum path sum passing through the current node.

  3. Update the global maximum path sum during the traversal.


Java Solution

class Solution {
    private int maxSum = Integer.MIN_VALUE; // Global variable to store the maximum path sum

    public int maxPathSum(TreeNode root) {
        dfs(root);
        return maxSum;
    }

    private int dfs(TreeNode node) {
        if (node == null) {
            return 0; // Return 0 for null nodes
        }

        // Recursively compute the maximum path sum for left and right subtrees
        int leftSum = Math.max(dfs(node.left), 0); // Ignore negative sums
        int rightSum = Math.max(dfs(node.right), 0);

        // Calculate the path sum passing through the current node
        int currentPathSum = leftSum + rightSum + node.val;

        // Update the global maximum path sum
        maxSum = Math.max(maxSum, currentPathSum);

        // Return the maximum path sum that can be extended to the parent node
        return node.val + Math.max(leftSum, rightSum);
    }
}

Explanation of the Solution

  1. DFS Traversal:

    • Traverse the binary tree using DFS to calculate the maximum path sum at each node.

  2. Maximum Sum at Each Node:

    • At each node, calculate:

      • The left subtree sum and right subtree sum, ignoring negative sums (as they reduce the total sum).

      • The current path sum, which includes the node's value and both left and right subtree sums.

  3. Global Maximum Update:

    • Update the maxSum (global variable) with the maximum value between its current value and the currentPathSum.

  4. Return Value:

    • Return the sum of the current node's value and the larger of its left or right subtree sums. This represents the maximum path sum that can be extended to its parent node.


Time Complexity โณ

  • O(n): Each node is visited once.

Space Complexity ๐Ÿ’พ

  • O(h): Where h is the height of the tree (due to recursion stack).


Follow-up Challenges ๐Ÿง

  1. How would you modify this solution to track the path that produces the maximum sum?

  2. Can this solution be converted into an iterative approach using a stack?

You can find the full solution

here
LeetCode Problem Link