思路:需要将奇数行正序输出,偶数行倒叙输出。可以使用双端队列,双端队列可以控制加入与移除的是第一个还是最后一个。因此我们可以加入一个count,每次循环便加1,用来判断这一层是奇数还是偶数。
如果为奇数,那么就将每一个数据加入到双端队列的最后面。得到的为正序。
如果为偶数,那么将每一个数据加入到双端队列的最前面,得到的为倒序。
这样就完成了树的正序与倒序的输出。
还可以控制que那一个双端队列的API,实现这个功能。也可以正常输出,在加入到list前判断奇偶,使用Collections.reserve(temp)来反转偶数行。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return new ArrayList();
}
LinkedList<TreeNode> que = new LinkedList<TreeNode>();
List list = new ArrayList();
que.addLast(root);
int count=0;
while(que.size()!=0){
int num=que.size();
LinkedList<Integer> temp = new LinkedList<>();
for(int i =0;i<num;i++){
TreeNode node =que.removeFirst();
if((count&1)==1){
temp.addFirst(node.val);
}else{
temp.addLast(node.val);
}
if(node.left!=null){
que.add(node.left);
}
if(node.right!=null){
que.add(node.right);
}
}
count++;
list.add(temp);
}
return list;
}
}