Skip to main content

Binary Tree Maximum Path Sum - Leetcode 124 - Python

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. 


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.
class Solution:
    def maxPathSum(self, root: Optional[TreeNode]) -> int:
        ans = [root.val]
        
        #max w/o split
        def dfs(root):
            if not root :
                return 0
            
            ml = dfs(root.left)
            ml = max(ml, 0)
            
            mr = dfs(root.right)
            mr = max(mr, 0)
            
            #max with split
            ans[0] = max(ans[0], root.val + ml + mr)
            
            return root.val + max(ml, mr)
        
        dfs(root)
        return ans[0]


Explaination :





Comments

Popular posts from this blog

May-6 2020 Challenge

  6.   Majority Element Given an array of size  n , find the majority element. The majority element is the element that appears  more than   ⌊ n/2 ⌋  times. You may assume that the array is non-empty and the majority element always exist in the array. Example 1: Input: [3,2,3] Output: 3 Example 2: Input: [2,2,1,1,1,2,2] Output: 2 Solution in Java  class Solution {     public int majorityElement(int[] num) {         int m = num[0], cnt= 1;     for (int i = 1; i < num.length; i++) {         if (cnt == 0) {             m= num[i];             cnt = 1;         } else if (num[i] == m) {             cnt++;         } else              cnt--;    }      return m;...

Leetcode 190. Reverse Bits. Python. Bit Manipulation

  190 .  Reverse Bits Reverse bits of a given 32 bits unsigned integer. Note: Note that in some languages, such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer type. They should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned. In Java, the compiler represents the signed integers using  2's complement notation . Therefore, in  Example 2  above, the input represents the signed integer  -3  and the output represents the signed integer  -1073741825 .   Example 1: Input: n = 00000010100101000001111010011100 Output: 964176192 (00111001011110000010100101000000) Explanation: The input binary string 00000010100101000001111010011100 represents the unsigned integer 43261596, so return 964176192 which its binary representation is 00111001011110000010100101000000 . Example 2: Input: n = 11111111111111111111...

Leetcode 58. Meeting Rooms II. Python (Easiest Explaination)

  58.  Meeting Rooms II Description Given an array of meeting time intervals consisting of start and end times  [[s1,e1],[s2,e2],...] (si < ei) , find the minimum number of conference rooms required.) (0,8),(8,10) is not conflict at 8 Example Example1 Input : intervals = [(0,30),(5,10),(15,20)] Output : 2 Explanation : We need two meeting rooms room1 : ( 0 , 30 ) room2 : ( 5 , 10 ),( 15 , 20 ) Example2 Input: intervals = [( 2 , 7 )] Output: 1 Explanation: Only need one meeting room Solution : """ Definition of Interval: class Interval(object):     def __init__(self, start, end):         self.start = start         self.end = end """ class Solution:     """     @param intervals: an array of meeting time intervals     @return: the minimum number of conference rooms required     """     def min_meeting_rooms( self , intervals: List[Interval]) -> int :   ...