508. 出现次数最多的子树元素和
508. 出现次数最多的子树元素和
给你一个二叉树的根结点 root
,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。
一个结点的 「子树元素和」 定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。
示例 1:
输入: root = [5,2,-3]
输出: [2,-3,4]
示例 2:
输入: root = [5,2,-5]
输出: [2]
提示:
- 节点数在
[1, 104]
范围内 -105 <= Node.val <= 105
思路:
本题涉及计算子树元素和,自然利用后序遍历自底向上计算最为快捷,利用哈希表以及一个计数量最后取出出现次数最多的元素即可。
class Solution {
public:
vector<int> res;
unordered_map<int,int>mp;//利用哈希表记录子树元素和与出现次数
int maxCount=0;//记录最大出现次数
vector<int> findFrequentTreeSum(TreeNode* root) {
traver(root);
for(auto a:mp){
if(a.second==maxCount){
res.push_back(a.first);
}
}
return res;
}
//返回子树元素和 二叉树遍历
int traver(TreeNode* root){
if(root==nullptr)return 0;
int rootLeft=traver(root->left);
int rootRight=traver(root->right);
//后序遍历
int rootSum=root->val+rootLeft+rootRight;
if(mp.count(rootSum)){
mp.at(rootSum)++;
}else{
mp.emplace(rootSum,1);
}
//更新最大次数
maxCount=(maxCount>mp.at(rootSum))?maxCount:mp.at(rootSum);
return rootSum;
}
};
本文来自博客园,作者:{BailanZ},转载请注明原文链接:https://www.cnblogs.com/BailanZ/p/16155087.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理