菜鸟心得.... 不对请指出.......

/*
BFS,广度优先搜索树,用最简单的2叉树来举例, 树的结构如下:
     A
    B C
 D E F G
H I J K L M N O
广度优先搜索树, 顺序应该是ABCDEFGHIJKLMNO;
意思是,先搜索完 上一层的节点,再开始搜索下一层的节点;
那么在BFS中, 会使用到一种数据结构----队列
队列的特点是,先进先出, 就像一条水管一样,这头进,那头出。
尾----------------------头
->> F E D C B A ->>>
-------------------------
从左边进去,只能从右边出来, 而先进去的,总是会先出来。
利用队列的这个特点。
1,先把根节点放进队列中。
当队列不为空时,执行下列234,否则结束。
2,取出队列的头,判断其value是否和x相同(X为要找的值),如果是,结束,否则删除 头元素 继续下一步。
3,判断左子树是否为空,不为空,将左子树放进队列。
4,判断右子树是否为空,不为空,将右子树放进队列。
*/
1 import java.util.Queue;
public class BFS {
class tree {
tree left;
tree right;
int value; public tree(int value) {
this.value = value;
}
} private Queue<tree> queue = new LinkedList<tree>(); public void solution(tree node, int x) {
queue.offer(node);
if (!queue.isEmpty()) {
if (queue.peek().value != x) {
queue.remove();
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
}
} }
 /*
DFS,深度优先搜索树,还是用最简单的二叉树来举例,
用最简单的办法,递归遍历。
或者适用 stack这数据结构。
*/
1 import java.util.Stack; public class dfs {
class tree {
tree left;
tree right;
int value; public tree(int value) {
this.value = value;
}
} private Stack<tree> stack = new Stack<tree>(); public void solution(tree node, int x) {
stack.push(node);
if (!stack.isEmpty()) {
if (stack.peek().value != x) {
stack.pop();
if (node.right != null) {
stack.add(node.right);
}
if (node.left != null) {
stack.add(node.left);
}
}
}
} public void solution2(tree node, int x) {
if (node.value != x) {
if (node.left != null) {
solution2(node.left, x);
} else if (node.right != null) {
solution2(node.left, x);
}
}
}
}

樹的DFS和BFS的更多相关文章

  1. dfs與bfs常用模板

    基本遍歷: //dfs void dfs(int x) { v[x]=1; for(int i=head[x];i;i=next[i]) { int y=ver[i]; if(v[y]) contin ...

  2. Clone Graph leetcode java(DFS and BFS 基础)

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  3. 数据结构(12) -- 图的邻接矩阵的DFS和BFS

    //////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...

  4. 数据结构(11) -- 邻接表存储图的DFS和BFS

    /////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...

  5. 在DFS和BFS中一般情况可以不用vis[][]数组标记

    开始学dfs 与bfs 时一直喜欢用vis[][]来标记有没有访问过, 现在我觉得没有必要用vis[][]标记了 看代码 用'#'表示墙,'.'表示道路 if(所有情况都满足){ map[i][j]= ...

  6. 图论中DFS与BFS的区别、用法、详解…

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  7. 图论中DFS与BFS的区别、用法、详解?

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  8. 数据结构基础(21) --DFS与BFS

    DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图的深度 ...

  9. dfs和bfs的区别

    详见转载博客:https://www.cnblogs.com/wzl19981116/p/9397203.html 1.dfs(深度优先搜索)是两个搜索中先理解并使用的,其实就是暴力把所有的路径都搜索 ...

随机推荐

  1. 意法STM32F1系列MCU单片机解密芯片破解复制

    意法STM32F1系列MCU单片机解密芯片破解复制 STM32F1系列MCU芯片解密: STM32F100解密 | STM32F101解密 | STM32F102解密 | STM32F103解密 |  ...

  2. Kindle支持哪些格式

    官方产品介绍页面有相关技术参数: Kindle Format 8 (AZW3), Kindle (AZW), TXT,PDF, MOBI, PRC原格式,HTML,DOC,DOCX,JPEG,GIF, ...

  3. 重置按钮小tip—为何不能重置表单数据呢

    刚开始学html的同志有时候可能会遇到一个问题,就是为什么在编辑页面里面的重置按钮总是不起作用呢不清空数据呢?接下来就说明一下原因. Reset 对象 Reset 对象代表 HTML 表单中的一个重置 ...

  4. Leetcode Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  5. tornado 学习笔记5 构建Tornado网站应用

    一个Tornado 网站应用通常由一个或多个RequestHanlde的子类.一个负责将请求路由至handlers的Application以及一个启动服务器的main()函数等组成. 一个最小的“he ...

  6. 使用功能强大的插件FastReport.Net打印报表实例

    我第一次使用FastReport插件做的功能是打印一个十分复杂的excel表格,有几百个字段都需要绑定数据,至少需要4个数据源,而且用到横向.竖向合并单元格. 我不是直接连接数据库,而是使用Regis ...

  7. JavaScript获取当前日期,昨天,今天日期以及任意天数间隔日期

    <script language="JavaScript" type="text/javascript"> function GetDateStr( ...

  8. 李洪强iOS经典面试题142-第三方框架及其管理

    李洪强iOS经典面试题142-第三方框架及其管理   第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...

  9. Flume_使用

    案例一: source:hive.log channel: memory  sink: logger输出 拷贝一份flume-conf.properties.template改名为hive-mem-l ...

  10. JVM中,对象在内存中的布局

    在hotSpot虚拟机中,对象在内存中的布局可以分成对象头.实例数据.对齐填充三部分. 对象头:主要包括: 1.对象自身的运行行元数据,比如哈希码.GC分代年龄.锁状态标志等,这部分长度在32位虚拟机 ...