倒序 正序

import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果
        if(pRoot == null) return res;//如果根节点为空就返回结果
        Deque<TreeNode> que = new LinkedList<TreeNode>();//用于存储每一层的节点

        que.offer(pRoot);
        int layer =0;
        while(!que.isEmpty()){
            ArrayList<Integer> temp = new ArrayList<>();
            int len = que.size();
            for(int i=0;i<len;i++){
                TreeNode node = que.poll();
                if(layer%2==0){
                    temp.add(node.val);
                }else{
                    temp.add(0,node.val);
                }
                if(node.left!=null) que.offer(node.left);
                if(node.right!=null) que.offer(node.right);
            }
            layer++;
            res.add(temp);
        }
                return res;
    }

}

1、add()和offer()区别:

add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方***返回 false。因此就可以在程序中进行有效的判断!
2.

public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode root) {
        ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果
        if(root == null) return res;//如果根节点为空就返回结果
        LinkedList<TreeNode> q = new LinkedList<TreeNode>();//用于存储每一层的节点
        q.add(root);
        int count = 0;
        while(!q.isEmpty()){
            ArrayList<Integer> temp = new ArrayList();
            for(int i=q.size(); i>0; i--){
                TreeNode node = q.poll();
                if(count%2== 0){
                    temp.add(node.val);
                }
                else{
                    temp.add(0,node.val);
                }
                if(node.left!=null) q.offer(node.left);
                if(node.right!=null) q.offer(node.right);
            }
            count++;
            res.add(temp);
        }
        return res;
    }
}