• 使用BFS框架AC多道题


    本片文章主要事项介绍一下BFS(广度优先遍历),然后通过BFS解决一些题目。

    框架思维很重要!!!

    BFS代码框架

    // 存储结构
    // {val,left,right}
    function bfs(root) {
      	// 当传入的是一棵空树的时候响应的操作
      	if (root == null) return 0;
      	const que = [];
      
      	while(que.length) {
          let sz = que.length;
          for(let i = 0; i < sz; ++i ) {
            let cur = que.shift();
            // 当前节点,在这里进行操作
            
            if (cur.left !== null){
              que.push(cur);
            }   
            if (cur.right!==null) {
              que.push(cur);
            }
          }
        }
    }
    

    常见题目

    1. 二叉树层次遍历

      /**
       * Definition for a binary tree node.
       * function TreeNode(val) {
       *     this.val = val;
       *     this.left = this.right = null;
       * }
       */
      /**
       * @param {TreeNode} root
       * @return {number[]}
       */
      var levelOrder = function(root) {
          if (root == null) return [];
          const que = [],result = [];
          que.push(root);
          while(que.length) {
              let size = que.length;
              for(let i = 0; i < size;++i) {
                  let cur = que.shift();
                  result.push(cur.val);
                  if (cur.left !== null ) que.push(cur.left);
                  if (cur.right !== null) que.push(cur.right)
               }
          }
          return result;
      };
      
    2. 求二叉树最大深度

      /**
       * Definition for a binary tree node.
       * function TreeNode(val, left, right) {
       *     this.val = (val===undefined ? 0 : val)
       *     this.left = (left===undefined ? null : left)
       *     this.right = (right===undefined ? null : right)
       * }
       */
      /**
       * @param {TreeNode} root
       * @return {number}
       */
      var maxDepth = function(root) {
      
          if (root == null) return 0;
          const que = [],depthArray = [];
          que.push(root);
      
          let depth = 1;
          // 队列不空的时候
          while (que.length !== 0) {
              let size = que.length;
              // 一层一层进行遍历的
      
              for (let i = 0; i < size; ++i) {
                  let cur = que.shift();
                  // // 碰到叶子节点
                  if (cur.left == null && cur.right == null) depthArray.push(depth);
      
                  if (cur.left !== null) que.push(cur.left);
                  if (cur.right !== null) que.push(cur.right);
              }
              // 遍历完一层之后深度增加1
              depth++;
          }
          return Math.max.apply(Math,depthArray);
      };
      
    3. 求二叉树最小深度

      在这里最小深度等价于碰到第一个叶子节点,因为最浅的那层叶子节点总是先被遍历到的。

      /**
       * Definition for a binary tree node.
       * function TreeNode(val, left, right) {
       *     this.val = (val===undefined ? 0 : val)
       *     this.left = (left===undefined ? null : left)
       *     this.right = (right===undefined ? null : right)
       * }
       */
      /**
       * @param {TreeNode} root
       * @return {number}
       */
      var minDepth = function(root) {
      
          if (root == null) return 0;
          const que = [];
          que.push(root);
      
          let depth = 1;
          // 队列不空的时候
          while (que.length !== 0) {
              let size = que.length;
              // 一层一层进行遍历的
      
              for (let i = 0; i < size; ++i) {
                  let cur = que.shift();
                  // // 碰到叶子节点
                  if (cur.left == null && cur.right == null) return depth;
      
                  if (cur.left !== null) que.push(cur.left);
                  if (cur.right !== null) que.push(cur.right);
              }
              // 遍历完一层之后深度增加1
              depth++;
          }
          return depth;
      };
      

    总结:

    ​ 从一个BFS框架可以看出,一旦掌握了类似的框架,你就可以解决一类的题目,只要你框架对了,剩下的就是细节处理了。解题时养成框架思维尤其重要。

    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    javascript关于面向对象的总结
    实现ICollection
    sqlbishi
    什么叫IOC(编程术语
    ASP.Net绘制柱状图和曲线图示例
    Web.config配置知识
    asp.net的生成曲线图的过程简单实例
    asp.net与.net编程常用函数与方法汇总
    C# 值类型与类的不同
    一步一步学Linq to sql(一):预备知识
  • 原文地址:https://www.cnblogs.com/rookie123/p/14653801.html
Copyright © 2020-2023  润新知