@@ -59,13 +59,153 @@ You may assume the sum of values in any subtree is in the range of 32-bit signed
59
59
### ** Python3**
60
60
61
61
``` python
62
-
62
+ # Definition for a binary tree node.
63
+ # class TreeNode:
64
+ # def __init__(self, val=0, left=None, right=None):
65
+ # self.val = val
66
+ # self.left = left
67
+ # self.right = right
68
+ class Solution :
69
+ def findFrequentTreeSum (self , root : TreeNode) -> List[int ]:
70
+ def dfs (root ):
71
+ if root is None :
72
+ return 0
73
+ left, right = dfs(root.left), dfs(root.right)
74
+ s = root.val + left + right
75
+ counter[s] += 1
76
+ return s
77
+
78
+ counter = Counter()
79
+ dfs(root)
80
+ mx = max (counter.values())
81
+ return [k for k, v in counter.items() if v == mx]
63
82
```
64
83
65
84
### ** Java**
66
85
67
86
``` java
87
+ /**
88
+ * Definition for a binary tree node.
89
+ * public class TreeNode {
90
+ * int val;
91
+ * TreeNode left;
92
+ * TreeNode right;
93
+ * TreeNode() {}
94
+ * TreeNode(int val) { this.val = val; }
95
+ * TreeNode(int val, TreeNode left, TreeNode right) {
96
+ * this.val = val;
97
+ * this.left = left;
98
+ * this.right = right;
99
+ * }
100
+ * }
101
+ */
102
+ class Solution {
103
+ private Map<Integer , Integer > counter;
104
+ private int mx;
105
+
106
+ public int [] findFrequentTreeSum (TreeNode root ) {
107
+ counter = new HashMap<> ();
108
+ mx = Integer . MIN_VALUE ;
109
+ dfs(root);
110
+ List<Integer > res = new ArrayList<> ();
111
+ for (Map . Entry<Integer , Integer > entry : counter. entrySet()) {
112
+ if (entry. getValue() == mx) {
113
+ res. add(entry. getKey());
114
+ }
115
+ }
116
+ int [] ans = new int [res. size()];
117
+ for (int i = 0 ; i < res. size(); ++ i) {
118
+ ans[i] = res. get(i);
119
+ }
120
+ return ans;
121
+ }
122
+
123
+ private int dfs (TreeNode root ) {
124
+ if (root == null ) {
125
+ return 0 ;
126
+ }
127
+ int s = root. val + dfs(root. left) + dfs(root. right);
128
+ counter. put(s, counter. getOrDefault(s, 0 ) + 1 );
129
+ mx = Math . max(mx, counter. get(s));
130
+ return s;
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### ** C++**
136
+
137
+ ``` cpp
138
+ /* *
139
+ * Definition for a binary tree node.
140
+ * struct TreeNode {
141
+ * int val;
142
+ * TreeNode *left;
143
+ * TreeNode *right;
144
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
145
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
146
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
147
+ * };
148
+ */
149
+ class Solution {
150
+ public:
151
+ unordered_map<int, int> counter;
152
+ int mx = 0;
153
+
154
+ vector<int> findFrequentTreeSum(TreeNode* root) {
155
+ mx = INT_MIN;
156
+ dfs(root);
157
+ vector<int> ans;
158
+ for (auto& entry : counter)
159
+ if (entry.second == mx)
160
+ ans.push_back(entry.first);
161
+ return ans;
162
+ }
163
+
164
+ int dfs (TreeNode* root) {
165
+ if (!root) return 0;
166
+ int s = root->val + dfs(root->left) + dfs(root->right);
167
+ ++counter[ s] ;
168
+ mx = max(mx, counter[ s] );
169
+ return s;
170
+ }
171
+ };
172
+ ```
68
173
174
+ ### **Go**
175
+
176
+ ```go
177
+ /**
178
+ * Definition for a binary tree node.
179
+ * type TreeNode struct {
180
+ * Val int
181
+ * Left *TreeNode
182
+ * Right *TreeNode
183
+ * }
184
+ */
185
+ func findFrequentTreeSum(root *TreeNode) []int {
186
+ counter := make(map[int]int)
187
+ mx := 0
188
+ var dfs func(root *TreeNode) int
189
+ dfs = func(root *TreeNode) int {
190
+ if root == nil {
191
+ return 0
192
+ }
193
+ s := root.Val + dfs(root.Left) + dfs(root.Right)
194
+ counter[s]++
195
+ if mx < counter[s] {
196
+ mx = counter[s]
197
+ }
198
+ return s
199
+ }
200
+ dfs(root)
201
+ var ans []int
202
+ for k, v := range counter {
203
+ if v == mx {
204
+ ans = append(ans, k)
205
+ }
206
+ }
207
+ return ans
208
+ }
69
209
```
70
210
71
211
### ** ...**
0 commit comments