LeetCode每日一题——508. 出现次数最多的子树元素和

简介: 给你一个二叉树的根结点 root ,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。

题目

给你一个二叉树的根结点 root ,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。

一个结点的 「子树元素和」 定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。

示例

示例 1:

2345_image_file_copy_9.jpg

输入: root = [5,2,-3]

输出: [2,-3,4]

示例 2:

2345_image_file_copy_11.jpg

输入: root = [5,2,-5]

输出: [2]

提示:

节点数在 [1, 104] 范围内

-105 <= Node.val <= 105

思路

这里用了递归的嵌套,即先求树的所有子节点,得节点的同时,求出该节点的所有子节点并求和,维持一个键为和、值为数量的哈希表,最终返回哈希表中值等于最大值的所有键即可。

题解

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
  # 存和与数量映射的哈希表
    ans = {}
    # 第一层递归
    def findFrequentTreeSum(self, root: TreeNode) -> List[int]:
        if root is None:
            return
        #  第二层递归
        def process(root,s):
            if root is None:
                return 0
            # 求以该节点包括子节点的和
            s += root.val + process(root.left, s) + process(root.right, s)
            return s
        temp = process(root, 0)
        self.ans[temp] = self.ans.get(temp, 0) + 1
        self.findFrequentTreeSum(root.left)
        self.findFrequentTreeSum(root.right)
        max_ = max(self.ans.values())
        return [i for i in self.ans.keys() if self.ans.get(i) == max_]
目录
相关文章
|
7天前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
24 7
|
7天前
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
21 1
|
7天前
|
算法 C语言 C++
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(上)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
12 1
|
7天前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
14 1
|
8天前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
20 1
|
12天前
LeetCode——572—— 另一棵树的子树
LeetCode——572—— 另一棵树的子树
|
13天前
LeetCode———100——相同的树
LeetCode———100——相同的树
|
13天前
|
算法 C语言
Leetcode_203.移除链表元素—C语言
Leetcode_203.移除链表元素—C语言
|
14天前
|
人工智能
力扣100114. 元素和最小的山形三元组 II(中等)
力扣100114. 元素和最小的山形三元组 II(中等)
|
19天前
|
存储
力扣 合并两个有序数列||移除元素
力扣 合并两个有序数列||移除元素
18 0