Skip to content

Commit 5e5e2ff

Browse files
committed
no message
1 parent 2acab52 commit 5e5e2ff

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

problems/most-frequent-subtree-sum.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,24 @@ def dfs(node):
1717
"""
1818
Time: O(N)
1919
Space: O(N)
20-
"""
20+
"""
21+
22+
"""
23+
Time: O(N)
24+
Space: O(N)
25+
26+
Throught the getSubtreeSum(root), we will also count subtreeSum of each node.
27+
"""
28+
class Solution(object):
29+
def findFrequentTreeSum(self, root):
30+
def getSubtreeSum(node):
31+
if not node: return 0
32+
subtreeSum = node.val+getSubtreeSum(node.left)+getSubtreeSum(node.right)
33+
memo[subtreeSum] += 1
34+
return subtreeSum
35+
36+
37+
memo = collections.Counter()
38+
getSubtreeSum(root)
39+
mostFrequenctCount = max([memo[subtreeSum] for subtreeSum in memo])
40+
return [subtreeSum for subtreeSum in memo if memo[subtreeSum]==mostFrequenctCount]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""
2+
Time: O(N)
3+
Space: O(N) for creating the list preorder.split(',')
4+
"""
5+
class Solution(object):
6+
def isValidSerialization(self, preorder):
7+
slot = 1
8+
9+
for c in preorder.split(','):
10+
slot -= 1 #each elemet consumes a slot
11+
if slot<0: return False
12+
if c!='#': slot += 2 #each non-null node also create 2 slot
13+
14+
return slot==0 #all slots should be fill

0 commit comments

Comments
 (0)