Concise Java Solution with BFS
\nclass Solution {\n    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {\n        \n        List<List<Integer>> result = new ArrayList<>();\n       
```\nclass Solution {\n    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {\n        \n        List<List<Integer>> result = new ArrayList<>();\n        \n        if (root == null)\n            return result;\n        \n        boolean reversed = false;\n        Queue<TreeNode> queue = new LinkedList<>();\n        queue.offer(root);\n        \n        while (!queue.isEmpty())\n        {\n            int size = queue.size();\n            List<Integer> list = new ArrayList<>();\n            \n            for (int i = 0; i < size; i++)\n            {\n                TreeNode node = queue.poll();\n                \n                if (reversed)\n                    list.add(0, node.val);\n                else\n                    list.add(node.val);\n                \n                if (node.left != null)\n                    queue.offer(node.left);\n                    \n                if (node.right != null)\n                    queue.offer(node.right);\n            }\n            \n            reversed = !reversed;\n            result.add(list);\n        }\n        \n        return result;\n    }\n}\n```
[]