Leetcode 508. Most Frequent Subtree Sum
来源:互联网 发布:网络理财被骗怎么办 编辑:程序博客网 时间:2024/04/29 22:18
直接贴代码,本题用递归不超时
问题描述:
Given the root of a tree, you are asked to find the most frequent subtree sum. 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). So what is the most frequent subtree sum value? If there is a tie, return all the values with the highest frequency in any order.
typedef pair<int, int> PAIR; int cmp(const PAIR &x, const PAIR &y) { return x.second > y.second; } //拆成相同的子问题,递归统计子树和情况,然后排序取最值class Solution {public: vector<int> findFrequentTreeSum(TreeNode *root) { map<int, int> result; calculateSubtree(result, root); //对计算结果排序 vector<PAIR> pair_vec; for (map<int, int>::iterator map_iter = result.begin(); map_iter != result.end(); ++map_iter) { pair_vec.push_back(make_pair(map_iter->first, map_iter->second)); } sort(pair_vec.begin(), pair_vec.end(), cmp); vector<int> mostFrequent; //取最值 for (vector<PAIR>::iterator curr = pair_vec.begin(); curr != pair_vec.end(); ++curr) { if (curr == pair_vec.begin()) { mostFrequent.push_back(curr->first); } else if (curr->second == (pair_vec.begin())->second) { mostFrequent.push_back(curr->first); } else { break; } } return mostFrequent; } int calculateSubtree(map<int, int>& result, TreeNode* root) { //子树为空,对结果0作用 if (root == NULL) return 0; //叶子节点直接加入子树和 if (root->right == NULL && root->left == NULL) { result[root->val]++; return root->val; } int total = root->val + calculateSubtree(result, root->left) + calculateSubtree(result, root->right); result[total]++; return total; }};
0 0
- Leetcode-508. Most Frequent Subtree Sum
- [leetcode] 508. Most Frequent Subtree Sum
- LeetCode 508. Most Frequent Subtree Sum
- Leetcode 508. Most Frequent Subtree Sum
- leetcode题解-508. Most Frequent Subtree Sum
- [LeetCode]508. Most Frequent Subtree Sum
- LeetCode笔记:508. Most Frequent Subtree Sum
- 【LeetCode】508. Most Frequent Subtree Sum
- Leetcode 508. Most Frequent Subtree Sum
- leetcode 508. Most Frequent Subtree Sum
- leetcode 508. Most Frequent Subtree Sum
- [leetcode]508. Most Frequent Subtree Sum
- [LeetCode] 508. Most Frequent Subtree Sum
- LeetCode 508. Most Frequent Subtree Sum (c++)
- leetcode 508. Most Frequent Subtree Sum
- leetcode 508. Most Frequent Subtree Sum
- [LeetCode] Most Frequent Subtree Sum
- 508. Most Frequent Subtree Sum
- 安卓界面基本组件---按钮
- Java NIO原理 图文分析及代码实现
- Qt/unity3d/OpenGL源码以及win7/win10/vs/office的下载地址
- java将金额数字转换成对应的汉字
- 《黑客与画家》读书笔记(1-3章)
- Leetcode 508. Most Frequent Subtree Sum
- Intellij插件开发:MonkeyMaster插件的实现(三)——写入日志的线程处理
- 粉丝经济大爆发居然真的来了
- 基于vue1.0开发的移动端H5积分商城项目
- mysql索引 mysql中select 查询条件随谈
- 17. Letter Combinations of a Phone Number -Medium
- nginx,配置http和https共存
- 职责链模式
- 欢迎使用CSDN-markdown编辑器