在二叉树中,广度优先搜索又可以称为层序遍历
上图中的二叉树经过层序遍历后的结果就是1、2、3、4、5
那我们该如何去一层一层地去保存二叉树的节点,很明显,只依赖二叉树的结构本身是无法去层序保存二叉树中的节点的,因此我们就需要借助队列来帮我们去保存每一层里面遍历过的元素。
实现原理
1、先将根节点1入队列
2、将1出队列,然后将节点1的左右子节点2和3加入队列
3、将节点2和3出队列,将其左右子节点放入队列
4、最后全部出队列。
例题讲解:
以牛客剑指Offer中的题NC297为例,题目要求如下
代码如下:
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<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null){
return list;
}
ArrayDeque<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
return list;
}
}