• JS 深度优先遍历与广度优先遍历 实现查找


    2.1.深度优先遍历
    深度优先查找(depth first search),采用栈结构,后进先出,JS用递归实现和没有用递归实现

    // 不用递归实现深度遍历优先  
    const depthFirstSearchWithoutRecursive = source => {
        const result = []; // 存放结果的数组
        // 当前栈内为全部数组
        const stack = JSON.parse(JSON.stringify(source));
        // 循环条件,栈不为空
        while (stack.length !== 0) {
          // 最上层节点出栈
          const node = stack.shift();
          // 存放节点
          result.push(node.id);
          // 如果该节点有子节点,将子节点存入栈中,继续下一次循环
          const len = node.children && node.children.length;
          for (let i = len - 1; i >= 0; i -= 1) {
            stack.unshift(node.children[i]);
          }
        }
        return result;
      };
     
      const s = depthFirstSearchWithoutRecursive(root)
      console.log(s);// 结果为 [1, 2, 4, 5, 7, 8, 6, 3]


    2.2.广度优先遍历
    广度优先查找(breadth first search),采用栈结构,后进先出,JS用递归实现和没有用递归实现

      const breadthFirstSearch = source => {
        const result = []; // 存放结果的数组
        // 当前队列为全部数据
        const queue = JSON.parse(JSON.stringify(source));
        // 循环条件,队列不为空
        while (queue.length > 0) {
          // 第一个节点出队列
          const node = queue.shift();
          // 存放结果数组
          result.push(node.id);
          // 当前节点有子节点则将子节点存入队列,继续下一次的循环
          const len = node.children && node.children.length;
          for (let i = 0; i < len; i += 1) {
            queue.push(node.children[i]);
          }
        }
        return result;
      };
     
      const s = breadthFirstSearch(root)
      console.log(s);// 结果为 [1, 2, 3, 4, 5, 6, 7, 8]



  • 相关阅读:
    那么这几天都是自己和工作上的事情比较零零散散
    在大家都返现的时候却有人什么都不奉献
    今天觉得自己好像比较紧张
    今天是下午有雨
    今天是星期五,上班已经三个礼拜了
    今天晚上控制电脑前,要提前开机
    其实对于家里的电脑就是硬盘不太好
    家里主要忙着建立房子
    今天装了一个RTI工具
    昨天已经开始讲业务的部分
  • 原文地址:https://www.cnblogs.com/plBlog/p/15248601.html
Copyright © 2020-2023  润新知