今天和大家聊的问题叫做 出现次数最多的子树元素和,我们先来看题面:https://leetcode-cn.com/problems/most-frequent-subtree-sum/
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).
给你一个二叉树的根结点,请你找出出现次数最多的子树元素和。一个结点的「子树元素和」定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。你需要返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。
示例
解题
本题较简单用后序遍历 + 存储 。用Python代码如下:
class Solution: def __init__(self): self.res = {} def findFrequentTreeSum(self, root: TreeNode) -> List[int]: if not root:return [] self._dfs(root) _max = max(self.res.values()) return [i for i, j in self.res.items() if j == _max] def _dfs(self, root): if not root: return 0 _sum = root.val + self._dfs(root.left) + self._dfs(root.right) self.res[_sum] = self.res.get(_sum, 0) + 1 return _sum
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。