这题的思路比较简单,主要是递归得到每个子树的和,然后统计这些和哪些出现的频率最高,最后输出即可。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def findFrequentTreeSum(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root == None:
return []
temp = []
result = []
def treeSum(root):
if root.left == None and root.right == None:
temp.append(root.val)
return root.val
left_sum = 0
right_sum = 0
if root.left != None:
left_sum = treeSum(root.left)
if root.right != None:
right_sum = treeSum(root.right)
r = left_sum+right_sum+root.val
temp.append(r)
return r
treeSum(root)
dist = {}
maxCount = 1
for i in temp:
if i not in dist.keys():
dist[i] = 1
else:
dist[i] += 1
if dist[i] > maxCount:
maxCount = dist[i]
for item in dist:
if dist[item] == maxCount:
result.append(item)
return result