@@ -235,21 +235,20 @@ function levelOrder(root: TreeNode | null): number[][] {
235
235
return res;
236
236
}
237
237
let isEven = false;
238
- const levelFn = (nodes: TreeNode[]) => {
239
- if (nodes.length === 0) {
240
- return res;
238
+ const queue = [root];
239
+ while (queue.length !== 0) {
240
+ const n = queue.length;
241
+ const vals = new Array(n);
242
+ for (let i = 0; i < n; i++) {
243
+ const { val, left, right } = queue.shift();
244
+ vals[i] = val;
245
+ left && queue.push(left);
246
+ right && queue.push(right);
241
247
}
242
- const nextNodes = [];
243
- const values = nodes.map(({ val, left, right }) => {
244
- left && nextNodes.push(left);
245
- right && nextNodes.push(right);
246
- return val;
247
- });
248
- res.push(isEven ? values.reverse() : values);
248
+ res.push(isEven ? vals.reverse() : vals);
249
249
isEven = !isEven;
250
- return levelFn(nextNodes);
251
- };
252
- return levelFn([root]);
250
+ }
251
+ return res;
253
252
}
254
253
```
255
254
@@ -277,34 +276,34 @@ function levelOrder(root: TreeNode | null): number[][] {
277
276
use std :: rc :: Rc ;
278
277
use std :: cell :: RefCell ;
279
278
use std :: collections :: VecDeque ;
280
-
281
279
impl Solution {
282
280
pub fn level_order (root : Option <Rc <RefCell <TreeNode >>>) -> Vec <Vec <i32 >> {
283
281
let mut res = Vec :: new ();
284
282
if root . is_none () {
285
283
return res ;
286
284
}
287
- let mut nodes = VecDeque :: new ();
288
- nodes . push_back (root . unwrap () );
285
+ let mut queue = VecDeque :: new ();
286
+ queue . push_back (root );
289
287
let mut is_even = false ;
290
- while ! nodes . is_empty () {
291
- let mut values = Vec :: new ();
292
- for _ in 0 .. nodes . len () {
293
- let node = nodes . pop_front (). unwrap ();
294
- let mut node = node . borrow_mut ();
295
- values . push (node . val);
288
+ while ! queue . is_empty () {
289
+ let n = queue . len ();
290
+ let mut vals = Vec :: with_capacity (n );
291
+ for _ in 0 .. n {
292
+ let mut node = queue . pop_front (). unwrap ();
293
+ let mut node = node . as_mut (). unwrap (). borrow_mut ();
294
+ vals . push (node . val);
296
295
if node . left. is_some () {
297
- nodes . push_back (node . left. take (). unwrap ())
296
+ queue . push_back (node . left. take ());
298
297
}
299
298
if node . right. is_some () {
300
- nodes . push_back (node . right. take (). unwrap ())
299
+ queue . push_back (node . right. take ());
301
300
}
302
301
}
303
302
if is_even {
304
- values . reverse ()
303
+ vals . reverse ();
305
304
}
306
- res . push (values );
307
- is_even = ! is_even
305
+ res . push (vals );
306
+ is_even = ! is_even ;
308
307
}
309
308
res
310
309
}
0 commit comments