L103. Binary Tree Zigzag Level Order Traversal
Problem:
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,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
Solution:
set a flag to identify the level num is odd or even;
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root == null) return res;
boolean flag = false;
Deque<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
List<Integer> list = new ArrayList<>();
int size = que.size();
for(int i = 0; i < size; i++){
if(flag == false){
TreeNode node = que.pollFirst();
list.add(node.val);
if(node.left != null) que.offerLast(node.left);
if(node.right != null) que.offerLast(node.right);
}else{
TreeNode node = que.pollLast();
list.add(node.val);
if(node.right != null) que.offerFirst(node.right);
if(node.left != null) que.offerFirst(node.left);
}
}
flag = !flag;
res.add(list);
}
return res;
}
Last updated
Was this helpful?