首页 > 其他 > 详细

【树】508. 出现次数最多的子树元素和

时间:2020-05-03 13:10:13      阅读:58      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

 

解决:

dfs遍历整个树 然后通过一个map记录对应的值,当遍历完成之后 遍历一遍max即可。

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12 
13     int dfs(TreeNode *root)
14     {
15         if (NULL == root)
16         {
17             return 0;
18         }
19 
20         // 计算左右
21         int left = dfs(root->left);
22         int right = dfs(root->right);
23 
24         // 该节点值
25         int sum = root->val + left + right;
26 
27         // 添加到map当中
28         Map[sum]++;
29 
30         return sum;
31     }
32 
33     vector<int> findFrequentTreeSum(TreeNode* root) 
34     {
35         if (NULL == root)
36         {
37             return {};
38         }
39 
40         dfs(root);
41 
42         vector<int> res;
43         int max_count = 0;
44 
45         // 遍历map
46         for (auto c: Map)
47         {
48             if (c.second == max_count)
49             {
50                 res.push_back(c.first);
51             }
52             else if (c.second > max_count)
53             {
54                 res.clear();
55                 res.push_back(c.first);
56                 max_count = c.second;
57             }
58         }
59 
60         return res;
61     }
62     private:
63         map<int, int> Map; // 第一个为当前值, 第二个为频率值
64 };

 

【树】508. 出现次数最多的子树元素和

原文:https://www.cnblogs.com/ocpc/p/12821546.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!