dfs实现
1.思路:从图中的未访问的一个顶点开始,沿着一条路一直走到底,然后
这条路尽头的节点,在从另外一条路走到底,不断递归此过程,直到所有
遍历完成
特点:不撞南墙不回头
2.具体实现:当从一个未知的顶点出发,将这条路走完时,会返回到上
一个节点,看他是否还有其他的子节点,如果有就继续往下遍历,如果没有就继续返回到
上一个节点,继续寻找除本身外还有其他节点不,以此类推
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中
3.递归实现dfs
public class solution{
private static class Node{
public int value;//定义节点
public Node left;//定义左节点
public Node right;//定义右节点
//有参构造用来干什么的呢?
public Node(int value,Node left,Node right){
this.value = value;
this.left = left;
this.right = right;}
}
//dfs方法用来实现递归遍历所有节点
public static void dfs(Node treeNode){
if(treeNode ==null){return;}
process(treeNode);//为什么通过process方法遍历节点
dfs(treeNode.left);//为什么通过dfs来遍历左右节点?
dfs(treeNode.right);}
}
学了一遍基础,但是不扎实,很多东西不明白他的具体含义就过了
但这就是个过程,明白自己的不足,继续深深地学习
递归总结:递归中,节点类中定义了节点,左节点以及右节点,还有
有参构造,但忘记了有参构造的作用?
有参构造的作用用于属性初始化
如果子类继承父类时,子类中没有无参构造会报错
在在定义的静态dfs方法中,调用了process和dfs方法利用递归的思想
实现了dfs算法
4.非递归实现dfs算法
public void solution{
public static void dfswithstack(Node root){
if(root ==null){retuen;}
Stack<Node>stack = new Stack<>();
stack.push(root)//将根节点压入栈中;
while(!stack.isEmpty()){
Node treeNode = stack.pop();
process(treeNode);//遍历节点
if(treeNode.right!=null){stack.push(treeNode.right);}
if(treeNode.left!=null){stack.push(treeNode.left);}
}
}
}
总结:非递归方法实现dfs利用栈的先进后出的特点实现
①先创建一个有参函数来实现dfs算法的实现
②判断根节点是否为空,如果为空结束
③定义一个节点类型的栈对象,先将根节点压入栈中
④判断栈中的元素是否为空,如果不为空,
定义一个节点对象来表示栈的出栈
⑤之后通过process方法来遍历出栈元素
⑥在依次通过栈先进后出的思想通过先序遍历先将右节点进栈,
再将左节点进栈。后面再通过上面的treeNode对象将元素出栈,
并通过process方法遍历
注意:进栈的顺序以及各个节点进栈出栈的代码顺序
5..生产中泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫
dfs实现的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
随机推荐
- LeetCode 刷题感想之动态规划
在 LeetCode/剑指Offer 上刷了500题左右了,应该写一篇文章总结一下自己的感想.因为我自己是测试,所以从测试角度来写感受吧. 先说动态规划. 什么是动态规划?是经典算法思想之一,是自底向 ...
- scrollToFirstError失效解决方法
ant design 使用 设置scrollToFirstError = true,表单验证失败后却没有滚动到第一个错误字段 解决方法: 在button按钮中加入 html-type = 'submi ...
- flutter 环境配置以及我的第一个flutter程序(Hello World)
电脑配置: 操作系统: Windows 7 或更高版本 (64-bit) 磁盘空间: 400 MB (不包括Android Studio的磁盘空间). Windows下所需安装有: 1.Flutter ...
- ybtoj 12F
求值的话改为求解前缀和的值,通过两个前缀和相减即可得到每个值. 每次询问相当于给一个方程. 一共有 $n$ 个未知数,因此需要 $n$ 个方程,同时每个数都必须至少在方程中出现一次. 最小生成树求解即 ...
- RKO队——冲刺随笔(5)
这个作业属于哪个课程 至诚软工实践F班 这个作业要求在哪里 第五次团队作业:项目冲刺 这个作业的目标 记录冲刺计划.要求包括当天会议照片.会议内容以及项目燃尽图(项目进度) 1.昨日进展 小程序大致完 ...
- 加热算法,加热温度控制加热功率,加热功率控制加热速度(PWM)
uint8_t user_heating_algorithmPID(void) { uint32_t temp_1; uint16_t Adcn; nrfx_err_t err_code; HEATI ...
- json提取器通过多条件筛选提取ID
可能在某些列表中如名称会有重复,此时就需要使用多个搜索条件来判定唯一性 $.data.[?(@.tymc=="测试测试")].[?(@.plat_merchandise_id==& ...
- springboot的websocket因IP问题无法连接
首先遇到这个问题有点奇葩,出现在项目上线时的客户现场,头两天一直都无法确定原因,因为它的表现方式很奇怪,基于springboot实现的websocket,同样的代码在公司研发环境不会有问题,客户现场会 ...
- vue路由守卫并向后台发送token
vue代码 //全局路由首位:当路由发生异常首先执行的方法 router.beforeEach((to, from, next) => { //是否被认证 var isAuthenticated ...
- OSPF的收敛特性