题目:
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).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / 9 20 / 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ] 题解:这题同样是BFS,用一个flag记录是否需要reverse,如果需要的话就把reverse的结果存储即可。代码如下:
1 public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
2 ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
3
4 if(root==null)
5 return res;
6
7 LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
8 queue.add(root);
9
10 int num = 0;
11 boolean reverse = false;//a flag
12
13 while(!queue.isEmpty()){
14 num = queue.size();
15 ArrayList<Integer> levelres = new ArrayList<Integer>();
16
17 for(int i = 0; i<num; i++){
18 TreeNode node = queue.poll();
19 levelres.add(node.val);
20
21 if(node.left!=null)
22 queue.add(node.left);
23 if(node.right!=null)
24 queue.add(node.right);
25 }
26
27 if(reverse){
28 Collections.reverse(levelres);
29 reverse = false;
30 }else{
31 reverse = true;
32 }
33 res.add(levelres);
34 }
35
36 return res;
37 }
Binary Tree ZigZag Level Order Traversal leetcode java