标签:子树 maxnum treeSum sum 元素 mp 508 root Leetcode
题目描述
给出二叉树的根,找出出现次数最多的子树元素和。一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。然后求出出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的元素(不限顺序)。
示例 1
输入:
5 / \ 2 -3
返回 [2, -3, 4],所有的值均只出现一次,以任意顺序返回所有值。
示例 2
输入:
5 / \ 2 -5
返回 [2],只有 2 出现两次,-5 只出现 1 次。
提示: 假设任意子树元素和均可以用 32 位有符号整数表示。
解题思路
int maxnum;
unordered_map<int,int> mp;
int treeSum(TreeNode* root){
if(root == NULL) return 0;
int sum = root->val;
sum += treeSum(root->left);
sum += treeSum(root->right);
mp[sum]++;
maxnum = max(maxnum,mp[sum]);
return sum;
}
vector<int> findFrequentTreeSum(TreeNode* root) {
vector<int> ans;
mp.clear();
maxnum = 0;
treeSum(root);
for(auto it=mp.begin();it != mp.end();it++){
if(it->second == maxnum) ans.push_back(it->first);
}
return ans;
}
标签:子树,maxnum,treeSum,sum,元素,mp,508,root,Leetcode 来源: https://blog.csdn.net/weixin_35338624/article/details/89791694
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。