​LeetCode刷题实战508:出现次数最多的子树元素和

2022-03-03 15:57:42 浏览数 (1)

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试 算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 出现次数最多的子树元素和,我们先来看题面:

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代码如下:

代码语言:javascript复制
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

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-500题汇总,希望对你有点帮助!

LeetCode刷题实战501:二叉搜索树中的众数

LeetCode刷题实战502:IPO

LeetCode刷题实战503:下一个更大元素 II

LeetCode刷题实战504:七进制数

LeetCode刷题实战505:迷宫II

LeetCode刷题实战506:相对名次

LeetCode刷题实战507:完美数

0 人点赞