最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 有迹可循的 BFS 问题 | 创作者训练营

    正文概述 掘金(六六柒)   2020-12-28   429

    BFS(Breadth First Search)广度优先算法

    问题

    LeetCode 102 二叉树层序遍历 有迹可循的 BFS 问题 | 创作者训练营

    分析

    按层打印,如何换行就是首先要关心的问题。

    根节点是明确的,同时根节点又是下一层的入口(通过 root.left / root.right 带出)。所以我们需要一个队列(queue)储存当前层所有的节点。每次换行,将上一层的节点推到结果数组中,并且通过递归收集当前层所有的节点,直到最后一层 - 队列为空。

    换行的细节,将 queue 中的一个 node 出队,同时将这个 node 的左右节点入队。直到 queue 中上一层所有的节点全部出队完毕,此时下一层所有节点也全部入队啦。依次递归,直到 queue 为空。

    节点为空为整个递归的结束条件。

    实现

    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    const levelOrder = (root) {
      if(!root) return [];
      
      // 起始状态
      // 递归入口
      const queue = [root];
      let res = [];
      
      // 开始遍历队列
      // 1. 循环终止条件为 queue.length
      while(queue.length) {
        // 2. 遍历 queue 时的终止条件用变量保存了一下
        //    这样做和不保存有什么区别
        //    如果和 1 处做个交换会怎么样
        const len = queue.length;
        for(let i=0; i < len; i++) {
          // 当前层(queue)的节点全部出队列
          // 并把下一层的节点全部入队
          const node = queue.shift();
          curlevel.push(node.val);
          if(node.left) queue.push(node.left);
          if(node.right) queue.push(node.right);
        }
        
        res.push(curlevel);
      }
      
      return res; 
    }
    

    总结

    BFS 中需要关注充当中间状态转换的队列(queue),以队列为突破口。关注换层的迭代过程。

    同时思考下代码注释中 1 、2 处有什么不同呢?

    「 一枚前端学习小透明,努力学习前端知识,同时分享自己对生活的一些思考,欢迎一起讨论交流。如果我的文章对你有帮助,请点个赞,会非常感恩你的鼓励。完」

    创作者训练营 征文活动正在进行中......


    起源地下载网 » 有迹可循的 BFS 问题 | 创作者训练营

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元