My Java Solution Beats 98%
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {\n        List<List<Integer>> res = new ArrayList();\n        travel(res, 0, root);\n        return 
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {\n        List<List<Integer>> res = new ArrayList();\n        travel(res, 0, root);\n        return res;\n    }\n    private void travel(List<List<Integer>> res, int level, TreeNode cur) {\n        if (cur == null) return;\n        if (res.size() <= level) {\n            res.add(new ArrayList<Integer>());\n        }\n        if (level % 2 == 0) {\n            res.get(level).add(cur.val);\n        }   else {\n            res.get(level).add(0, cur.val);\n        }\n        travel(res, level + 1, cur.left);\n        travel(res, level + 1, cur.right);\n    }
['Breadth-First Search', 'Java']