Skip to content

Commit 4516f72

Browse files
authored
Merge pull request #3588 from aadil42/patch-114
Create 0103-binary-tree-zigzag-level-order-traversal.js
2 parents c90fd46 + 81d45a1 commit 4516f72

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* BFS
3+
* Time O(N) | Space O(N)
4+
* https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
5+
* @param {TreeNode} root
6+
* @return {number[][]}
7+
*/
8+
var zigzagLevelOrder = (root) => {
9+
const isEdgeBase = (root === null);
10+
if (isEdgeBase) return [];
11+
12+
return search(root);/* Time O(N) | Space O(N) */
13+
};
14+
15+
var search = (root, isZigZag = true, order = []) => {
16+
const queue = new Queue([ root ]);
17+
18+
while (!queue.isEmpty()) { /* Time O(N) */
19+
const levels = [];
20+
21+
bfs(queue, isZigZag, levels); /* Time O(WIDTH) | Space O(WIDTH) */
22+
order.push(levels); /* Space O(N) */
23+
isZigZag = !isZigZag;
24+
}
25+
26+
return order;
27+
}
28+
29+
const bfs = (queue, isZigZag, levels) => {
30+
for (let level = queue.size(); (0 < level); level--) {/* Time O(WIDTH) */
31+
const { left, val, right } = queue.dequeue();
32+
33+
if (left) queue.enqueue(left); /* Space O(WIDTH) */
34+
if (right) queue.enqueue(right);/* Space O(WIDTH) */
35+
36+
levels.push(val); /* Space O(N) */
37+
}
38+
39+
if (!isZigZag) levels.reverse();
40+
}
41+

0 commit comments

Comments
 (0)