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实现的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  4. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  5. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  6. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  7. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

  10. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

随机推荐

  1. python3GUI--仿做一个网易云音乐By:PyQt5(附下载地址)

    @ 目录 一.前言 二.展示-主界面 1.静图1 2.静图2 3.静图3 3.静图3 4.动图1 三.展示-登录界面 1.静图1 2.静图2 5.动图2 四.展示-系统托盘 五.UI设计记录 1.UI ...

  2. String 练习题

    题目一:获取指定字符串中,大写字母.小写字母.数字的个数. 题目二:将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串. 题目三:查询大字符串中,出现指定小字符串的次数.如&q ...

  3. 09 Hive安装与操作

    一.安装Hive 下载解压重命名权限 配置环境变量 修改Hive配置文件 修改/usr/local/hive/conf下的hive-site.xml 1 2 3 4 5 6 7 8 9 10 11 1 ...

  4. idea 改变片段内相同变量的快捷键

    在 win系统中 shift+F6 在 ios系统中Fn+shift+F6

  5. NOI-1253:Dungeon Master(BFS)

    描述You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of ...

  6. 关于ADB命令工具

    android提供了不少命令行工具,方便我们调试和查看信息.下面是frameworks/base/cmds(android 6.0.1)中的命令. $ tree cmds -L 1 cmds am├─ ...

  7. CF1430

    CF1430 那个博客搭好遥遥无期. A: 看代码. #include<bits/stdc++.h> using namespace std; int main() { int t;sca ...

  8. Q:su命令切换用户无法使用,被拒绝

    su命令切换用户无法使用,被拒绝 问题描述 su 命令报错 su: Permission denied 如下图: su 命令 报错 su: Permission denied,不管是su普通用户还是r ...

  9. 微信小程序 入门总结篇

      页面生命周期 Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { }, ...

  10. habse与Hadoop兼容性问题

    今天大数据实验课被血坑,在第一步hbase的安装时就卡住了,之后处理了一整节实验课,也未能解决,回到宿舍后才解决(这里不得不说"度娘"不行了,出现的问题完全找不到,最好还是在chr ...