深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中。

深度优先遍历

主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底...,不断递归重复此过程,直到所有的顶点都遍历完成。

广度优先遍历

指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。

代码如下:

const data = [

{

name: 'a',

children: [

{ name: 'b', children: [{ name: 'e' }] },

{ name: 'c', children: [{ name: 'f' }] },

{ name: 'd', children: [{ name: 'g' }] },

],

},

{

name: 'a2',

children: [

{ name: 'b2', children: [{ name: 'e2' }] },

{ name: 'c2', children: [{ name: 'f2' }] },

{ name: 'd2', children: [{ name: 'g2' }] },

],

}

]

// 深度遍历, 使用递归

function getName(data) {

const result = [];

data.forEach(item => {

const map = data => {

result.push(data.name);

data.children && data.children.forEach(child => map(child));

}

map(item);

})

return result.join(',');

}

// 广度遍历, 创建一个执行队列, 当队列为空的时候则结束

function getName2(data) {

let result = [];

let queue = data;

while (queue.length > 0) {

[...queue].forEach(child => {

queue.shift();

result.push(child.name);

child.children && (queue.push(...child.children));

});

}

return result.join(',');

}

console.log(getName(data))

console.log(getName2(data))

深度优先遍历,广度优先遍历相关推荐

  1. 图的理解:深度优先和广度优先遍历及其 Java 实现

    遍历 图的遍历,所谓遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: 深度优先遍历 广度优先遍历 深度优先 深度优先遍历,从初始访问结点出发,我们知道 ...

  2. 【图】深度优先遍历 广度优先遍历

    文章目录 一.广度优先遍历 二.深度优先遍历 深度优先遍历和广度优先遍历是遍历图的两种常见方式,接下来就通过这两种方式来实现一下图具体遍历的过程 当我位于游乐园的景区 A 时,为了玩遍所有的景区我们有 ...

  3. 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件:       ⑴有且仅有一个结点没有前驱 ...

  4. 【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...

    [树]二叉树遍历算法(深度优先.广度优先遍历,前序.中序.后序.层次)及Java实现 目录 一.前序遍历 二.中序遍历 三.后序遍历 四.层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它 ...

  5. c++ 数据结构 图的应用(实现图的深度优先和广度优先遍历)——以邻接表为存储结构

    数据结构实习--图及应用(图的遍历) 一.问题描述 很多涉及图上操作的算法都是以图的遍历操作为基础的.试写一个程序,演示无向图的遍历操作. 二.基本要求 以邻接表为存储结构,实现连通无向图的深度优先和 ...

  6. P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序。

    P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序. 头文件1:SeqList.h #include<stdio.h>#define M ...

  7. 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程

    图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...

  8. 二叉树的深度优先和广度优先遍历

    图的深度优先搜索法是树的先根遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问 ...

  9. 图的存储以及深度优先以及广度优先遍历

    转载自:http://blog.csdn.net/gamer_gyt/article/details/51498546 一:图的分类 1:无向图 即两个顶点之间没有明确的指向关系,只有一条边相连,例如 ...

  10. 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...

最新文章

  1. 用Genymotion来调试android应用
  2. Visual C++ Attribute Programming
  3. android仿苹果SwitchButton效果的实现
  4. 玩具(BZOJ-1307)
  5. Kali Linux 网络扫描秘籍 第三章 端口扫描(三)
  6. pytorch损失函数
  7. 图片识别之验证码识别
  8. 4400php兑换美金是多少,美金换算人民币怎么算(美金换人民币怎样计算)
  9. Linux (中标麒麟)离线安装 Python
  10. WORD中插入VISIO图形,打印乱码解决
  11. js中事件绑定的几种方式
  12. 英伟达gt和gtx的区别
  13. 工具类App的下一个风口:今天,我们聊一聊颜值经济这回事
  14. 怎么制作高清GIF动图
  15. Android蓝牙UUID
  16. 什么是防火墙?防火墙能发挥什么样的作用?
  17. mysql存储过程计算阶乘,为什么计算阶乘 ,7的阶乘是5040
  18. [2018年工作重点规划] substance designer 使用和工作流,材质库
  19. 为什么喝牛奶会拉肚子
  20. 【克拉克拉】产品分析报告

热门文章

  1. 组策略管理(关闭UAC)
  2. 未知错误 ID:-2147467259 操作必须使用一个可更新的查询
  3. 互联网营销师淘宝主播
  4. 数据结构之队列(循环队列)
  5. 常见移动端兼容性问题
  6. 网吧防火墙选购(转)
  7. 用excel做数据分析
  8. 简约学术毕业论文答辩PPT模板
  9. 2017年电子设计大赛(B题 滚球控制系统)赛后总结
  10. 2021计算机技术与软件考试报名时间,2021年上半年计算机技术与软件专业 技术资格(水平)考试报名通知...