public static int[][] printTree(TreeNode root) {
// write code here
LinkedBlockingQueue<TreeNode> linkedBlockingQueue=new LinkedBlockingQueue<>();
linkedBlockingQueue.add(root);
ArrayList<ArrayList> arrayList=new ArrayList<>();
int size=1;
while (!linkedBlockingQueue.isEmpty()){
ArrayList<TreeNode> list=new ArrayList<>();
while (size>0){
TreeNode p=linkedBlockingQueue.poll();
list.add(p);
if (p.left!=null){
linkedBlockingQueue.add(p.left);
}
if (p.right!=null){
linkedBlockingQueue.add(p.right);
}
size--;
}
arrayList.add(list);
size=linkedBlockingQueue.size();
}
int[][] result=new int[arrayList.size()][];
for (int i=0;i<arrayList.size();i++){
ArrayList<TreeNode> arrayList1=arrayList.get(i);
result[i]=new int[arrayList1.size()];
for (int j=0;j<arrayList1.size();j++){
result[i][j]=arrayList1.get(j).val;
}
}
return result;
}