classSolution{publicList<List<Integer>>zigzagLevelOrder(TreeNode root){List<List<Integer>> res =newArrayList<List<Integer>>();// Base caseif(root ==null)return res;if(root.left ==null&& root.right ==null){
res.add(newArrayList<>(Arrays.asList(root.val)));return res;}Queue<TreeNode> q =newLinkedList();
q.offer(root);while(!q.isEmpty()){int size = q.size();ArrayList<Integer> elements =newArrayList();// Go through the levelfor(int i =0; i < size;++i){// Current nodeTreeNode curNode = q.poll();
elements.add(curNode.val);if(curNode.left !=null) q.offer(curNode.left);if(curNode.right !=null) q.offer(curNode.right);}// Odd number level should reverseif(res.size()%2==1)Collections.reverse(elements);
res.add(elements);}return res;}}