思路:
层次遍历后将偶数层的list进行反转
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
if(root == null) return list;
levelTravel(list,root);
for(int i=1;i<list.size();i+=2){
List<Integer> temp = reverseList(list.get(i));
list.set(i,temp);
}
return list;
}
public List<Integer> reverseList(List<Integer> list){
List<Integer> tempList = new ArrayList<>();
for(int i=list.size()-1;i>=0;i--){
tempList.add(list.get(i));
}
list = tempList;
return list;
}
public void levelTravel(List<List<Integer>> list,TreeNode root){
List<Integer> tempList= new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int start = 0,end = 1;
while(!queue.isEmpty()){
TreeNode node = queue.poll();
tempList.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right!= null){
queue.offer(node.right);
}
start++;
if(start == end){
start = 0;
end = queue.size();
list.add(new ArrayList<>(tempList));
tempList = new ArrayList<>();
}
}
}
}