广度优先遍历BFS和深度优先遍历DFS
1.DFS和BFS的特点比较
2.BFS的适用场景
3.如何用BFS进行层序遍历
4.如何用BFS求解最短路径问题
DFS遍历使用递归
void dfs(TreeNode root){
if (root==null){
return;
}
dfs(root.left);
dfs(root.right);
}
BFS 遍历使用队列数据结构
void bfs(TreeNode root){
Queue<TreeNode> queue=new ArrayDeque<>();
if(root!=null){queue.add(root);}
while(!queue.isEmpty()){
TreeNode node=queue.poll();//出队
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
}
然 DFS 与 BFS 都是将二叉树的所有结点遍历了一遍,但它们遍历结点的顺序不同。
BFS的应用--层序遍历
void bfs(TreeNode root){
Queue <TreeNode>queue=new ArrayDeque<>();//新建一个队列
queue.add(root);
while(!queue.isEmpty()){
TreeNode node=queue.poll();//出队
for(int i=0;i<queue.size();i++){
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
}
}
按要求输出数组


void BFS(TreeNode root){
Queue<TreeNode> queue=new ArrayDeque<TreeNode>();
queue.add(root);
List<List<Integer>> list=new ArrayList<List<Integer>>();
while(!queue.isEmpty()){
List<Integer> level=new ArrayList<Integer>();
for(int i=0;i<queue.size();i++){
TreeNode node= queue.poll();
level.add(node);
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
list.add(level);
}
return list;
}
最短路径问题待补充: