Skip to content

Commit e14e2d0

Browse files
committed
Added binary tree zig zag level order traversal - Medium
1 parent 6421b01 commit e14e2d0

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
/**
17+
* Time: O(n)
18+
* Space: O(n)
19+
*/
20+
class Solution {
21+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
22+
List<List<Integer>> levels = new ArrayList<>();
23+
24+
if (root == null) {
25+
return levels;
26+
}
27+
ArrayDeque<TreeNode> queue = new ArrayDeque<>();
28+
queue.add(root);
29+
// Do a regular level order traversal
30+
31+
while (!queue.isEmpty()) {
32+
int size = queue.size();
33+
List<Integer> thisLevel = new ArrayList<>();
34+
35+
for (int i = 0; i < size; i++) {
36+
TreeNode current = queue.remove();
37+
thisLevel.add(current.val);
38+
if (current.left != null) {
39+
queue.add(current.left);
40+
}
41+
if (current.right != null) {
42+
queue.add(current.right);
43+
}
44+
45+
}
46+
levels.add(thisLevel);
47+
}
48+
49+
boolean leftToRight = true;
50+
for (int i = 0; i < levels.size(); i++) {
51+
List<Integer> thisLevel = levels.get(i);
52+
if (leftToRight) {
53+
// This level is already ordered from left to right
54+
leftToRight = !leftToRight;
55+
} else {
56+
// reverse this order (right to left) to mimic the zigzag pattern
57+
Collections.reverse(thisLevel);
58+
leftToRight = !leftToRight;
59+
}
60+
}
61+
return levels;
62+
63+
}
64+
}

0 commit comments

Comments
 (0)