forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0103-binary-tree-zigzag-level-order-traversal.js
More file actions
42 lines (33 loc) · 1.07 KB
/
0103-binary-tree-zigzag-level-order-traversal.js
File metadata and controls
42 lines (33 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
* BFS
* Time O(N) | Space O(N)
* https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
* @param {TreeNode} root
* @return {number[][]}
*/
var zigzagLevelOrder = (root) => {
const isEdgeBase = root === null;
if (isEdgeBase) return [];
return search(root); /* Time O(N) | Space O(N) */
};
var search = (root, isZigZag = true, order = []) => {
const queue = new Queue([root]);
while (!queue.isEmpty()) {
/* Time O(N) */
const levels = [];
bfs(queue, isZigZag, levels); /* Time O(WIDTH) | Space O(WIDTH) */
order.push(levels); /* Space O(N) */
isZigZag = !isZigZag;
}
return order;
};
const bfs = (queue, isZigZag, levels) => {
for (let level = queue.size(); 0 < level; level--) {
/* Time O(WIDTH) */
const { left, val, right } = queue.dequeue();
if (left) queue.enqueue(left); /* Space O(WIDTH) */
if (right) queue.enqueue(right); /* Space O(WIDTH) */
levels.push(val); /* Space O(N) */
}
if (!isZigZag) levels.reverse();
};