标题:Java实现广度遍历二叉树2
public List<List<Integer>> levelOrder(TreeNode head){
List<List<Integer>> alist = new ArrayList<>();
if(head == null){
return alist;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(head);
while(!q.isEmpty()){
int size = q.size();
List<Integer> blist = new ArrayList<>();
for(int i = 0; i < size;i++){
TreeNode p = q.poll();
blist.add(p.val);
if(p.left != null){
q.offer(p.left);
}
if(p.right != null){
q.offer(p.right);
}
}
alist.add(blist);
}
return alist;
}
public List<List<Integer>> levelOrder(TreeNode head){
List<List<Integer>> alist = new ArrayList<>();
if(head == null){
return alist;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(head);
this.level(q, alist, new ArrayList<>(), 1);
return alist;
}
public void level(Queue<TreeNode> q, List<List<Integer>> alist, List<Integer> blist, int count){
if(q.isEmpty()){
return ;
}else{
TreeNode p = q.poll();
if(p.left != null){
q.offer(p.left);
}
if(p.right != null){
q.offer(p.right);
}
count--;
blist.add(p.val);
if(count == 0){
alist.add(blist);
blist = new ArrayList<>();
count = q.size();
}
this.level(q, alist, blist, count);
}
}
public List<List<Integer>> levelOrder(TreeNode head){
List<List<Integer>> alist = new ArrayList<>();
if(head == null){
return alist;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(head);
this.level(head, alist, 0);
return alist;
}
public void level(TreeNode root, List<List<Integer>> alist, int index){
if(root == null){
return ;
}
if(index >= alist.size()){
alist.add(new ArrayList<>());
}
alist.get(index).add(root.val);
if(root.left != null){
this.level(root.left, alist, index + 1);
}
if(root.right != null){
this.level(root.right, alist, index + 1);
}
}