1
1
/**
2
2
* https://leetcode.com/problems/binary-tree-level-order-traversal/
3
- * Time O(N) | Space O(W)
3
+ * Time O(N) | Space O(N)
4
+ * Note that the time complexity is actually O(N^2) if we consider the fact that we use an array as a queue and calling Array.shift() takes O(N)
4
5
* @param {TreeNode } root
5
6
* @return {number[][] }
6
7
*/
@@ -11,12 +12,12 @@ var levelOrder = function(root) {
11
12
return bfs ( [ root ] ) ;
12
13
} ;
13
14
14
- const bfs = ( queue , levels = [ ] ) => {
15
- while ( queue . length ) {
15
+ const bfs = ( queue /* Space O(W) */ , levels = [ ] /* Space O(N) */ ) => {
16
+ while ( queue . length ) { // Time O(N)
16
17
const level = [ ] ;
17
18
18
19
for ( let i = ( queue . length - 1 ) ; 0 <= i ; i -- ) {
19
- const node = queue . shift ( ) ;
20
+ const node = queue . shift ( ) ; // Time O(N)
20
21
21
22
if ( node . left ) queue . push ( node . left ) ;
22
23
if ( node . right ) queue . push ( node . right ) ;
@@ -32,11 +33,11 @@ const bfs = (queue, levels = []) => {
32
33
33
34
/**
34
35
* https://leetcode.com/problems/binary-tree-level-order-traversal/
35
- * Time O(N) | Space O(H )
36
+ * Time O(N) | Space O(N )
36
37
* @param {TreeNode } root
37
38
* @return {number[] }
38
39
*/
39
- var levelOrder = function ( root , level = 0 , levels = [ ] ) {
40
+ var levelOrder = function ( root , level = 0 , levels = [ ] /* Space O(N) */ ) {
40
41
const isBaseCase = root === null ;
41
42
if ( isBaseCase ) return levels ;
42
43
@@ -45,7 +46,7 @@ const bfs = (queue, levels = []) => {
45
46
46
47
levels [ level ] . push ( root . val ) ;
47
48
48
- return dfs ( root , level , levels ) ;
49
+ return dfs ( root , level , levels ) ; // Time O(N) | Space O(H)
49
50
}
50
51
51
52
const dfs = ( root , level , levels ) => {
0 commit comments