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).
For example: Given binary tree [3,9,20,null,null,15,7],
3
/ \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
Solution
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */publicclassSolution {publicList<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> result =newArrayList<>();List<TreeNode> currentLevel =newArrayList<>();if (root !=null) {currentLevel.add(root); }boolean left =false;while (!currentLevel.isEmpty()) {List<Integer> cur =currentLevel.stream().map(item ->item.val).collect(Collectors.toList());result.add(cur);List<TreeNode> nextLevel =newArrayList<>();if (left) {for(int i =currentLevel.size() -1; i >=0; i --) {TreeNode curNode =currentLevel.get(i);if (curNode.left!=null) {nextLevel.add(curNode.left); }if (curNode.right!=null) {nextLevel.add(curNode.right); } } left =false; } else {for(int i =currentLevel.size() -1; i >=0; i --) {TreeNode curNode =currentLevel.get(i);if (curNode.right!=null) {nextLevel.add(curNode.right); }if (curNode.left!=null) {nextLevel.add(curNode.left); } } left =true; } currentLevel = nextLevel; }return result; }}