45
45
46
46
<!-- 这里可写通用的实现逻辑 -->
47
47
48
+ ** 方法一:BFS**
49
+
48
50
<!-- tabs:start -->
49
51
50
52
### ** Python3**
59
61
# self.left = left
60
62
# self.right = right
61
63
class Solution :
62
- def averageOfLevels (self , root : TreeNode) -> List[float ]:
63
- res = []
64
+ def averageOfLevels (self , root : Optional[TreeNode]) -> List[float ]:
64
65
q = deque([root])
66
+ ans = []
65
67
while q:
66
- n = len (q)
67
- s = 0
68
+ s, n = 0 , len (q)
68
69
for _ in range (n):
69
- node = q.popleft()
70
- s += node.val
71
- if node.left:
72
- q.append(node.left)
73
- if node.right:
74
- q.append(node.right)
75
- res.append(s / n)
76
- return res
70
+ root = q.popleft()
71
+ s += root.val
72
+ if root.left:
73
+ q.append(root.left)
74
+ if root.right:
75
+ q.append(root.right)
76
+ ans.append(s / n)
77
+ return ans
78
+ ```
79
+
80
+ ``` python
81
+ # Definition for a binary tree node.
82
+ # class TreeNode:
83
+ # def __init__(self, val=0, left=None, right=None):
84
+ # self.val = val
85
+ # self.left = left
86
+ # self.right = right
87
+ class Solution :
88
+ def averageOfLevels (self , root : Optional[TreeNode]) -> List[float ]:
89
+ def dfs (root , i ):
90
+ if root is None :
91
+ return
92
+ if len (s) == i:
93
+ s.append([root.val, 1 ])
94
+ else :
95
+ s[i][0 ] += root.val
96
+ s[i][1 ] += 1
97
+ dfs(root.left, i + 1 )
98
+ dfs(root.right, i + 1 )
99
+
100
+ s = []
101
+ dfs(root, 0 )
102
+ return [a / b for a, b in s]
77
103
```
78
104
79
105
### ** Java**
@@ -98,24 +124,71 @@ class Solution:
98
124
*/
99
125
class Solution {
100
126
public List<Double > averageOfLevels (TreeNode root ) {
101
- List<Double > res = new ArrayList<> ();
102
- Queue <TreeNode > q = new LinkedList <> ();
127
+ List<Double > ans = new ArrayList<> ();
128
+ Deque <TreeNode > q = new ArrayDeque <> ();
103
129
q. offer(root);
104
130
while (! q. isEmpty()) {
105
- double s = 0 , n = q. size();
131
+ int n = q. size();
132
+ long s = 0 ;
106
133
for (int i = 0 ; i < n; ++ i) {
107
- TreeNode node = q. poll ();
108
- s += node . val;
109
- if (node . left != null ) {
110
- q. offer(node . left);
134
+ root = q. pollFirst ();
135
+ s += root . val;
136
+ if (root . left != null ) {
137
+ q. offer(root . left);
111
138
}
112
- if (node . right != null ) {
113
- q. offer(node . right);
139
+ if (root . right != null ) {
140
+ q. offer(root . right);
114
141
}
115
142
}
116
- res. add(s / n);
143
+ ans. add(s * 1.0 / n);
144
+ }
145
+ return ans;
146
+ }
147
+ }
148
+ ```
149
+
150
+ ``` java
151
+ /**
152
+ * Definition for a binary tree node.
153
+ * public class TreeNode {
154
+ * int val;
155
+ * TreeNode left;
156
+ * TreeNode right;
157
+ * TreeNode() {}
158
+ * TreeNode(int val) { this.val = val; }
159
+ * TreeNode(int val, TreeNode left, TreeNode right) {
160
+ * this.val = val;
161
+ * this.left = left;
162
+ * this.right = right;
163
+ * }
164
+ * }
165
+ */
166
+ class Solution {
167
+ private List<Long > s = new ArrayList<> ();
168
+ private List<Integer > cnt = new ArrayList<> ();
169
+
170
+ public List<Double > averageOfLevels (TreeNode root ) {
171
+ dfs(root, 0 );
172
+ List<Double > ans = new ArrayList<> ();
173
+ for (int i = 0 ; i < s. size(); ++ i) {
174
+ ans. add(s. get(i) * 1.0 / cnt. get(i));
117
175
}
118
- return res;
176
+ return ans;
177
+ }
178
+
179
+ private void dfs (TreeNode root , int i ) {
180
+ if (root == null ) {
181
+ return ;
182
+ }
183
+ if (s. size() == i) {
184
+ s. add((long ) root. val);
185
+ cnt. add(1 );
186
+ } else {
187
+ s. set(i, s. get(i) + root. val);
188
+ cnt. set(i, cnt. get(i) + 1 );
189
+ }
190
+ dfs(root. left, i + 1 );
191
+ dfs(root. right, i + 1 );
119
192
}
120
193
}
121
194
```
@@ -136,24 +209,63 @@ class Solution {
136
209
* @return {number[]}
137
210
*/
138
211
var averageOfLevels = function (root ) {
139
- let res = [];
140
- let queue = [root ];
141
- while (queue .length > 0 ) {
142
- n = queue .length ;
143
- let sum = 0 ;
144
- for (let i = 0 ; i < n; i ++ ) {
145
- let node = queue .shift ();
146
- sum += node .val ;
147
- if (node .left ) {
148
- queue .push (node .left );
212
+ let q = [root ];
213
+ let ans = [];
214
+ while (q .length ) {
215
+ const n = q .length ;
216
+ let s = 0 ;
217
+ for (let i = 0 ; i < n; ++ i ) {
218
+ root = q .shift ();
219
+ s += root .val ;
220
+ if (root .left ) {
221
+ q .push (root .left );
149
222
}
150
- if (node .right ) {
151
- queue .push (node .right );
223
+ if (root .right ) {
224
+ q .push (root .right );
152
225
}
153
226
}
154
- res .push (sum / n);
227
+ ans .push (s / n);
155
228
}
156
- return res;
229
+ return ans;
230
+ };
231
+ ```
232
+
233
+ ``` js
234
+ /**
235
+ * Definition for a binary tree node.
236
+ * function TreeNode(val, left, right) {
237
+ * this.val = (val===undefined ? 0 : val)
238
+ * this.left = (left===undefined ? null : left)
239
+ * this.right = (right===undefined ? null : right)
240
+ * }
241
+ */
242
+ /**
243
+ * @param {TreeNode} root
244
+ * @return {number[]}
245
+ */
246
+ var averageOfLevels = function (root ) {
247
+ let s = [];
248
+ let cnt = [];
249
+ function dfs (root , i ) {
250
+ if (! root) {
251
+ return ;
252
+ }
253
+ if (s .length == i) {
254
+ s .push (root .val );
255
+ cnt .push (1 );
256
+ } else {
257
+ s[i] += root .val ;
258
+ cnt[i]++ ;
259
+ }
260
+ dfs (root .left , i + 1 );
261
+ dfs (root .right , i + 1 );
262
+ }
263
+ dfs (root, 0 );
264
+ let ans = [];
265
+ for (let i = 0 ; i < s .length ; ++ i) {
266
+ ans .push (s[i] / cnt[i]);
267
+ }
268
+ return ans;
157
269
};
158
270
```
159
271
@@ -170,22 +282,58 @@ var averageOfLevels = function (root) {
170
282
*/
171
283
func averageOfLevels (root *TreeNode ) []float64 {
172
284
q := []*TreeNode{root}
173
- var ans []float64
285
+ ans := []float64 {}
174
286
for len (q) > 0 {
175
287
n := len (q)
176
- var sum int
288
+ s := 0
177
289
for i := 0 ; i < n; i++ {
178
- node : = q[0 ]
290
+ root = q[0 ]
179
291
q = q[1 :]
180
- sum += node .Val
181
- if node .Left != nil {
182
- q = append (q, node .Left )
292
+ s += root .Val
293
+ if root .Left != nil {
294
+ q = append (q, root .Left )
183
295
}
184
- if node .Right != nil {
185
- q = append (q, node .Right )
296
+ if root .Right != nil {
297
+ q = append (q, root .Right )
186
298
}
187
299
}
188
- ans = append (ans, float64 (sum)/float64 (n))
300
+ ans = append (ans, float64 (s)/float64 (n))
301
+ }
302
+ return ans
303
+ }
304
+ ```
305
+
306
+ ``` go
307
+ /* *
308
+ * Definition for a binary tree node.
309
+ * type TreeNode struct {
310
+ * Val int
311
+ * Left *TreeNode
312
+ * Right *TreeNode
313
+ * }
314
+ */
315
+ func averageOfLevels (root *TreeNode ) []float64 {
316
+ s := []int {}
317
+ cnt := []int {}
318
+ var dfs func (root *TreeNode, i int )
319
+ dfs = func (root *TreeNode, i int ) {
320
+ if root == nil {
321
+ return
322
+ }
323
+ if len (s) == i {
324
+ s = append (s, root.Val )
325
+ cnt = append (cnt, 1 )
326
+ } else {
327
+ s[i] += root.Val
328
+ cnt[i]++
329
+ }
330
+ dfs (root.Left , i+1 )
331
+ dfs (root.Right , i+1 )
332
+ }
333
+ dfs (root, 0 )
334
+ ans := []float64 {}
335
+ for i , t := range s {
336
+ ans = append (ans, float64 (t)/float64 (cnt[i]))
189
337
}
190
338
return ans
191
339
}
@@ -208,25 +356,69 @@ func averageOfLevels(root *TreeNode) []float64 {
208
356
class Solution {
209
357
public:
210
358
vector<double > averageOfLevels(TreeNode* root) {
211
- queue<TreeNode* > q({ root}) ;
359
+ queue<TreeNode* > q {{ root}} ;
212
360
vector<double > ans;
213
361
while (!q.empty()) {
214
362
int n = q.size();
215
- long long sum = 0;
363
+ long long s = 0;
216
364
for (int i = 0; i < n; ++i) {
217
- TreeNode * node = q.front();
365
+ root = q.front();
218
366
q.pop();
219
- sum += node ->val;
220
- if (node ->left != nullptr ) q.push(node ->left);
221
- if (node ->right != nullptr ) q.push(node ->right);
367
+ s += root ->val;
368
+ if (root ->left) q.push(root ->left);
369
+ if (root ->right) q.push(root ->right);
222
370
}
223
- ans.emplace_back(sum * 1.0 / n);
371
+ ans.push_back(s * 1.0 / n);
224
372
}
225
373
return ans;
226
374
}
227
375
};
228
376
```
229
377
378
+ ```cpp
379
+ /**
380
+ * Definition for a binary tree node.
381
+ * struct TreeNode {
382
+ * int val;
383
+ * TreeNode *left;
384
+ * TreeNode *right;
385
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
386
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
387
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
388
+ * };
389
+ */
390
+
391
+ using ll = long long;
392
+
393
+ class Solution {
394
+ public:
395
+ vector<ll> s;
396
+ vector<int> cnt;
397
+
398
+ vector<double> averageOfLevels(TreeNode* root) {
399
+ dfs(root, 0);
400
+ vector<double> ans(s.size());
401
+ for (int i = 0; i < s.size(); ++i) {
402
+ ans[i] = (s[i] * 1.0 / cnt[i]);
403
+ }
404
+ return ans;
405
+ }
406
+
407
+ void dfs(TreeNode* root, int i) {
408
+ if (!root) return;
409
+ if (s.size() == i) {
410
+ s.push_back(root->val);
411
+ cnt.push_back(1);
412
+ } else {
413
+ s[i] += root->val;
414
+ cnt[i]++;
415
+ }
416
+ dfs(root->left, i + 1);
417
+ dfs(root->right, i + 1);
418
+ }
419
+ };
420
+ ```
421
+
230
422
### ** Rust**
231
423
232
424
``` rust
0 commit comments