File tree Expand file tree Collapse file tree 1 file changed +13
-15
lines changed Expand file tree Collapse file tree 1 file changed +13
-15
lines changed Original file line number Diff line number Diff line change 15
15
* @return {number[][] }
16
16
*/
17
17
var levelOrder = function ( root ) {
18
- if ( ! root )
19
- return [ ] ;
20
18
const levels = [ ] ;
21
- for ( let tuple , stack = [ [ root , 0 ] ] ; tuple = stack . pop ( ) ; ) {
22
- const [ node , level ] = tuple ;
19
+ new function push ( node = root , level = 0 ) {
20
+ if ( ! node )
21
+ return ;
23
22
( levels [ level ] ??= [ ] ) . push ( node . val ) ;
24
- for ( const leaf of [ node . right , node . left ] )
25
- leaf && stack . push ( [ leaf , level + 1 ] ) ;
26
- }
23
+ for ( const leaf of [ node . left , node . right ] )
24
+ push ( leaf , level + 1 ) ;
25
+ } ;
27
26
return levels ;
28
27
} ;
29
28
30
- var levelOrder2 = function ( root ) {
29
+ var levelOrderIterative = function ( root ) {
31
30
const levels = [ ] ;
32
- ! function navigate ( node , levels , level ) {
33
- if ( ! node )
34
- return ;
35
- ( levels [ level ] ??= [ ] ) . push ( node . val ) ;
36
- for ( const leaf of [ node . left , node . right ] )
37
- navigate ( leaf , levels , level + 1 ) ;
38
- } ( root , levels , 0 ) ;
31
+ for ( let take , queue = root ? [ root ] : [ ] ; take = queue . length ; ) {
32
+ for ( let level = levels [ levels . length ] = [ ] , node ; take -- ; ) {
33
+ level . push ( ( node = queue . shift ( ) ) . val ) ;
34
+ queue . push ( ...[ node . left , node . right ] . filter ( Boolean ) ) ;
35
+ }
36
+ }
39
37
return levels ;
40
38
} ;
You can’t perform that action at this time.
0 commit comments