Problem Statement: Given the root
of a binary tree, return the most frequent subtree sum. If there is a tie, return all the values with the highest frequency in any order.
The subtree sum of a node is defined as the sum of all the node values formed by the subtree rooted at that node (including the node itself).
Example 1:
Input: root = [5,2,-3] Output: [2,-3,4]
Constraints:
- The number of nodes in the tree is in the range
[1, 104]
. -105 <= Node.val <= 105
Leetcode Difficulty: Medium
Code:
class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution(object):
def __init__(self):
self.subtree_sums = {}
self.max_freq=-1
def get_max_subtree_sum(self, root):
if root==None:
return 0
leftsum = self.get_max_subtree_sum(root.left)
rightsum = self.get_max_subtree_sum(root.right)
currval = root.val
summation = currval + rightsum + leftsum
self.subtree_sums[summation] = self.subtree_sums.get(summation, 0)+1
self.max_freq = max(self.max_freq, self.subtree_sums[summation])
return summation
def findFrequentTreeSum(self, root):
self.get_max_subtree_sum(root)
result=[]
for k,v in self.subtree_sums.items():
if v==self.max_freq:
result.append(k)
return result
Thought Process / Explanation:
We know that sum of the subtree rooted at a certain node is left sum + right sum + curr val. We need to store the sum with it's count and later return only max frequency sum -- for this keeping a dictionary sounds good and also maintaining global max_freq counter for comparison.
Thank You!
No comments:
Post a Comment
Please share your valuable feedback. It will help me and community grow.