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).
Example : Given binary tree
3
/ \
9 20
/ \
15 7
return
[
[3],
[20, 9],
[15, 7]
]
Method:
Use a deque and poll elements from deque from both sides
Solution:
Time: O(n) Space: O(n)
/** * Definition for binary tree * class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { * val = x; * left=null; * right=null; * } * } */ public class Solution { public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode A) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); Deque<TreeNode> queue = new ArrayDeque<>(); queue.addLast(A); int level = 0; while (!queue.isEmpty()) { int size = queue.size(); ArrayList<Integer> row = new ArrayList<>(); for (int i = 0; i < size; i ++) { TreeNode curr = null; if (level % 2 == 0) { curr = queue.pollFirst(); if (curr.left != null) queue.addLast(curr.left); if (curr.right != null) queue.addLast(curr.right); } else { curr = queue.pollLast(); if (curr.right != null) queue.addFirst(curr.right); if (curr.left != null) queue.addFirst(curr.left); } row.add(curr.val); } result.add(row); level ++; } return result; } }