// From right to left, pop last, add to first // From left to right, pop first, add to last classSolution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { if (root == null) returnnewArrayList<>(); booleanfromLeft=true; Deque<TreeNode> q = newLinkedList<>(); q.offer(root); List<List<Integer>> ans = newArrayList<>(); while (!q.isEmpty()) { intcurrLength= q.size(); List<Integer> currLevel = newArrayList<>(); for (inti=0; i < currLength; i++) { TreeNodecurrNode= fromLeft ? q.removeFirst() : q.removeLast(); currLevel.add(currNode.val); if (fromLeft) { if (currNode.left != null) { q.addLast(currNode.left); } if (currNode.right != null) { q.addLast(currNode.right); } } else { if (currNode.right != null) { q.addFirst(currNode.right); } if (currNode.left != null) { q.addFirst(currNode.left); } } } ans.add(currLevel); fromLeft = !fromLeft; } return ans; } }