一、概念
1、定义
Broad First Search
2、与DFS区别
BFS找到的路径最短
3、本质
找出图中从起点到终点的最近距离
二、二叉树的最小高度111
1、代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int minDepth(TreeNode root) { if(root == null) return 0; Queue<TreeNode> q = new LinkedList<>(); q.add(root); int depth = 1; while(!q.isEmpty()){ int sz = q.size(); for(int i = 0; i < sz; i++){ TreeNode node = q.poll(); if(node.left == null && node.right == null) return depth; //将邻接点加入队列 if(node.left != null) q.offer(node.left); if(node.right != null) q.offer(node.right); } depth++; } return depth; } }
2、比较
DFS靠递归的堆栈,BFS借助队列齐头并进
BFS可以在没遍历完整棵树时就得到最短距离,而回溯法必须遍历完整棵树才行
DFS空间复杂度log级(堆的深度=树高),BFS空间复杂度N
一般在寻找最短路径时用BFS,否则用DFS更多一些。
三、
原文:https://www.cnblogs.com/liujinhui/p/14598760.html