import java.util.ArrayList; import java.util.Queue; import java.util.concurrent.LinkedBlockingDeque;

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

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

}

} */ public class Solution { ArrayList<ArrayList > Print(TreeNode pRoot) { ArrayList<ArrayList> list = new ArrayList<>(); if(pRoot == null) return list;

    ArrayList<Integer> tList;
    Queue<TreeNode> queue = new LinkedBlockingDeque<>();
    queue.add(pRoot);//先让根节点入队

// tList.add(pRoot.val); // list.add(tList);

    while(!queue.isEmpty()) {
    	int size = queue.size();//此时队列中元素的个数就是这层树的结点的个数
    	tList = new ArrayList<>();
    	for(int i = 0;i < size;i++) {
            //把树的左右子节点入队
    		if(queue.peek().left != null) queue.add(queue.peek().left);
    		if(queue.peek().right != null) queue.add(queue.peek().right);
    		
    		tList.add(queue.poll().val);//把队列的收元素出队并加入到链表中
    	}
    	
    	list.add(tList);
    }
    
    return list;
}

}