Skip to content

Commit 5d5b125

Browse files
binary tree zigzag level order traversal
1 parent 842f0c6 commit 5d5b125

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package easy;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.LinkedList;
6+
import java.util.List;
7+
import java.util.Queue;
8+
9+
import classes.TreeNode;
10+
11+
/**
12+
* 103. Binary Tree Zigzag Level Order Traversal
13+
*
14+
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
15+
16+
For example:
17+
Given binary tree [3,9,20,null,null,15,7],
18+
3
19+
/ \
20+
9 20
21+
/ \
22+
15 7
23+
return its zigzag level order traversal as:
24+
[
25+
[3],
26+
[20,9],
27+
[15,7]
28+
]
29+
*/
30+
public class BinaryTreeZigzagLevelOrderTraversal {
31+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
32+
Queue<TreeNode> q = new LinkedList();
33+
List<List<Integer>> levels = new ArrayList();
34+
if(root == null) return levels;
35+
q.offer(root);
36+
boolean forward = true;
37+
while(!q.isEmpty()){
38+
int size = q.size();
39+
List<Integer> level = new ArrayList();
40+
for(int i = 0; i < size; i++){
41+
TreeNode curr = q.poll();
42+
level.add(curr.val);
43+
if(curr.left != null) q.offer(curr.left);
44+
if(curr.right != null) q.offer(curr.right);
45+
}
46+
if(forward){
47+
forward = false;
48+
levels.add(level);
49+
} else {
50+
Collections.reverse(level);
51+
levels.add(level);
52+
forward = true;
53+
}
54+
}
55+
return levels;
56+
}
57+
}

0 commit comments

Comments
 (0)