除深度优先遍历之外,二叉树还有另外一种遍历,广度优先遍历。
层序遍历,即按层遍历(广度优先)
用队列来实现该遍历
1.把根放到队列中(创始)
2.循环直到 队列为空
把队首结点取出
把队首结点的左右孩子放到队列(非空)
//层序遍历
public static void levelOrder(Node root){
if(root==null){
return ;
}
Queue<Node>queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
Node front=queue.poll();
if(front.left!=null){
queue.add`在这里插入代码片`(front.left);
}
if(front.right!=null){
queue.add(front.right);
}
}
return;
}
层序遍历的应用
判断是否为完全二叉树
1层序遍历树 直到遇见null;
2检查队列中是否还有不为空not null
//是否完全二叉树
public static boolean isComplete(Node root){
if(root==null){
return true;
}
Queue<Node>queue=new LinkedList<>();
queue.add(root);
while(true){
Node front=queue.poll();
if(front==null){
break;
}
queue.add(front.left);
queue.add(front.right);
}
while(!queue.isEmpty()){
Node node=queue.poll();
if(node!=null){
return false;
}
}
return true;
}