Binary Tree Zigzag Level Order Traversal
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]
]
Anaylysis
Similar to Binary Tree Level Order Traversal, only difference is to make odd and even level different.
Use BFS.
Code
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (root==null) {return result;}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
int level = 0;
while (!queue.isEmpty()){
int size = queue.size();
List<Integer> subList = new ArrayList<Integer>();
for (int i=0; i<size;i++){
if(queue.peek().left!=null) {queue.add(queue.peek().left);}
if(queue.peek().right!=null) {queue.add(queue.peek().right);}
if(level%2==0) {subList.add(queue.poll().val);}
else {subList.add(0, queue.poll().val);}
}
result.add(subList);
level++;
}
return result;
}
}