011、BFS算法解题套路(labuladong)

文章参考链接
视频参考地址

BFS

1、概念

BFS:宽度优先搜索(breadth-first-search)

  • 将问题抽象成图,利用队列实现 ,每次将一个节点周围的所有节点加入队列
  • 空间复杂度比DFS大很多

2、框架本质

问题核心:

  • 在一副图中,从start(起点)到target(目标点)的最短路径

框架实现:

    // 计算从节点start到目标target节点的最短距离长度
    int BFS(Node start, Node target) {
   
        Queue<Node> queue;// 队列
        Set<Node> set;// 记录走过得到节点
        int step = 0;// 记录走过的步数

        // 首先将起始节点加入队列和set中
        queue.add(start);
        set.add(start);
        // 开始循环遍历
        while (!queue.isEmpty()) {
   
            // 首先记录队列中目前的大小
            int size = queue.size();
            // 将队列中的所有节点向四周扩散
            for (int i = 0; i < size; i++) {
   
                Node cur = queue.poll();
                // 判断当前元素是否是目标
                if (cur == target) {
   
                    return step;
                }
                // 将当前元素的周边元素全部加入到队列和set中
                for (Node around : cur.around()) {
   
                    if (!set.contains(around)) {
   
                        queue.add(around);
                        set.add(around)
                    }
                }
            }
            // 更新距离
            step++;
        }
    }

3、二叉树的的最小高度

力扣111题链接:地址点我

class Solution {
   
    public int minDepth(TreeNode root) {
   
        // 先行条件判断
        if (root == null) {
   
            return 0;
        }
        // 定义一个队列去存放元素(关键结构)
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        // 由于
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值