这里将每一层的节点用双端队列temp保存起来,用tag标记奇偶层,当为奇数层时,节点陆续在队尾加入队列,而为偶数层时,节点陆续在堆首加入队列。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null)
return new LinkedList();
boolean tag = true;
List<List<Integer>> res = new LinkedList();
Queue<TreeNode> queue = new LinkedList();
queue.offer(root);
while(!queue.isEmpty()){
LinkedList<Integer> temp = new LinkedList();
for(int i = queue.size(); i > 0; --i){
TreeNode head = queue.poll();
if(tag) temp.addLast(head.val);
else temp.addFirst(head.val);
if(head.left != null) queue.offer(head.left);
if(head.right != null) queue.offer(head.right);
}
res.add(temp);
tag = !tag;
}
return res;
}
}