zoukankan      html  css  js  c++  java
  • 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]



  • 相关阅读:
    hibernate缓存清除(转)
    hibernate缓存
    hibernate延迟加载
    session进行增删改查操作
    curl命令详解
    CURL 宏定义列表
    CURL常用命令---样例
    打印 上一主题 下一主题 利用cURL实现单个文件分多段同时下载,支持断点续传(修订版)
    curl断点续载
    CURL常用命令
  • 原文地址:https://www.cnblogs.com/plBlog/p/15248601.html
Copyright © 2011-2022 走看看