算法之深度优先搜素(DFS)和广度优先搜素(BFS)
深度优先搜素(DFS):如果当前节点有孩子,遍历当前孩子的孩子再遍历兄弟节点的孩子(一条路走到头再回来走另一条)。
**HTML 代码**
<div class="root"><div class="items"><ol><li class="list-item">a</li></ol><div class="item"><span>aaa</span></div></div>
</div>
// 深度优先搜索 递归版
<script>function DFS(node, list) {if (node) {list.push(node);var child = node.children;// 如果存在孩子,对每个孩子再进行递归搜索for (var i = 0; i < child.length; i++) {DFS(child[i], list);}}return list;}var root = document.querySelector('.root');var list = [];console.log(DFS(root, list));
</script>
输出为: [div.root, div.items, ol, li.list-item, div.item, span]
广度优先搜索:先遍历根节点的所有孩子,再遍历所有孩子的孩子(一层一层的往外走)
function BFS(node) {// 分别定义两个数组,result 用来存放最后结果;arr 模拟先进先出队列var result = [];var arr = [];if (node) {arr.push(node);while(arr.length) {// 每次取出队列中的第一个元素,并将该元素的孩子 push 进队列var item = arr.shift();var children = item.children;result.push(item);for (var i = 0; i < children.length; i++) {arr.push(children[i]);}}}return result;}var node = document.querySelector('.root');console.log(BFS(node));
输出为: [div.root, div.items, ol, div.item, li.list-item, span]
扩展:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
用例:
{10,5,12,4,7},22
对应输出应该为:
[[10,5,7],[10,12]]
/* function TreeNode(x) {this.val = x;this.left = null;this.right = null;
} */
function FindPath(root, expectNumber)
{// write code here// 深度优先搜索求和问题var result = [];if (!root) {return result;}DFS(root, expectNumber, [], 0, result);return result;
}function DFS(root, expectNumber, path, currentSum, result) {currentSum += root.val;path.push(root.val);if (currentSum === expectNumber && root.left === null && root.right === null) {result.push(path.slice(0));}if (root.left) {DFS(root.left, expectNumber, path, currentSum, result);}if (root.right) {DFS(root.right, expectNumber, path, currentSum, result);}// 每次清空数组path.pop();
}
算法之深度优先搜素(DFS)和广度优先搜素(BFS)相关推荐
- 【算法】深度搜索(DFS) 和 广度搜索(BFS)
深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作. 简单来说,深度搜素算法就是一 ...
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...
- 【算法】蓝桥杯dfs深度优先搜索之排列组合总结
[导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...
- 算法第十期——DFS(深度优先搜索)的剪枝优化
目录 DFS:剪枝 DFS:有哪些剪枝方法 DFS例题一:剪格子 [思路] DFS例题二:路径之谜 [样例分析] DFS例题三:四阶幻方 [思路] [做法一] [做法二] DFS例题三:分考场 [样例 ...
- java 8 第15篇 给定数字,输出先前的所有的质素和非质素(优化)
** * 获取质素和非质素的优化: * 其中T.A和R分别是流中元素的类型.用于累积部分结果的对象类型,以及collect操作最 * 终结果的类型.这里应该收集Integer流,而累加器和结果类 ...
- 【算法】蓝桥杯dfs深度优先搜索之图连通总结
前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结> → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,第三次声明下文的 ...
- 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...
- 算法提高课-搜索-DFS之连通性模型-AcWing 1113. 红与黑:dfs和bfs两种做法
题目分析 来源:acwing 分析: ac代码 dfs写法 dfs搜的时候需要dfs(下一状态) 本题统计连续的黑色格子数量 :从(x, y) – > (a ,b) 扩展时, cnt += df ...
- 数据结构与算法A实验六图论---7-1 列出连通集(BFS DFS)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输入格式: 输入第1 ...
最新文章
- Canny算法源码,欢迎交流
- 全球无人车头部三强格局明确,百度自动驾驶估值400亿美金
- Cloud一分钟 | 阿里云推杭州城市大脑2.0:实时指挥200名交警;马云即将卸任阿里,蚂蚁云不断加快区块链产业布局...
- MySQL表自动增长列插入数据
- 关于coredump文件生成与查看
- hibernate配置文件和映射文件的dtd文件
- 【unit7 unit9】cifs网络文件系统访问;vsftp服务
- Vue绑定style的使用方式(令组件复用)
- HTML5基础学习-表格标签
- 空间变换与计算_04_4x4矩阵
- 卡巴斯基7.0离线更新升级包病毒库
- 电感电容串联起什么作用
- 美团热修复 Robust 方案接入(一)
- 察举科目-汉代察举制度的重要环节
- html中加粗文字,span文字加粗_span盒子对象内字体加粗
- 按步搭建简单IoT微服务(2)
- 基于ng-alain做国际化
- 【后续还会补充】Sublime Text 4 常用插件安装及配置方法
- 云原生|kubernetes |一文带你搞懂pod调度策略,驱逐策略,污点、容忍调度
- NestJs 学习(一) 基础知识