樹的DFS和BFS
菜鸟心得.... 不对请指出....... /*
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的更多相关文章
- 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 ...
- 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. ...
- 数据结构(12) -- 图的邻接矩阵的DFS和BFS
//////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...
- 数据结构(11) -- 邻接表存储图的DFS和BFS
/////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...
- 在DFS和BFS中一般情况可以不用vis[][]数组标记
开始学dfs 与bfs 时一直喜欢用vis[][]来标记有没有访问过, 现在我觉得没有必要用vis[][]标记了 看代码 用'#'表示墙,'.'表示道路 if(所有情况都满足){ map[i][j]= ...
- 图论中DFS与BFS的区别、用法、详解…
DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...
- 图论中DFS与BFS的区别、用法、详解?
DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...
- 数据结构基础(21) --DFS与BFS
DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图的深度 ...
- dfs和bfs的区别
详见转载博客:https://www.cnblogs.com/wzl19981116/p/9397203.html 1.dfs(深度优先搜索)是两个搜索中先理解并使用的,其实就是暴力把所有的路径都搜索 ...
随机推荐
- oj Rapid Typing
import bs4 import requests import urllib2 import time import base64 session=requests.Session() respo ...
- YUV RGB播放器 打开, 显示RGB数据
可以查看RGB像素数据 可以通过菜单栏打开像素数据文件,也可以通过拖拽方式打开文件.如果文件名称中包含了“{w}x{h}”这样的字符串(例如“test_320x420.yuv”),系统会自动解析为该像 ...
- nodejs review-01
lesson lesson-code 05 Run your first web server 使用curl //指定方法;显示header信息 curl -X GET -i localhost:30 ...
- 2016 Multi-University Training Contest 3
5/11 2016 Multi-University Training Contest 3官方题解 2016年多校训练第三场 老年选手历险记 暴力 A Sqrt Bo(CYD) 题意:问进行多少次开根 ...
- 如何更好地学习dubbo源代码(转)
很荣幸,作为这样一款业界使用率和好评率出众的RPC框架的维护者,今天这个文章主要是想帮助那些热爱开源的同学,更好的来研究dubbo的源代码. 一.Dubbo整体架构 1.Dubbo与Spring的整合 ...
- 李洪强iOS经典面试题147-WebView与JS交互
李洪强iOS经典面试题147-WebView与JS交互 WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...
- plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别及作用
Bundle versions string, short:用于itunes上显示的版本号,即对外的版本,一般除了版本迭代外,不能随意更改. Bundle version:内部项目管理的版本号,是给程 ...
- 13.final关键字
1.final修饰的变量只能赋一次值,不赋值时,会提示初始化 2.final修饰的方法不能被重写 3.final修饰的类不能被继承
- css 温故而知新 定位(position)与权限(z-index)
1.进行定位(position)的元素的权限(z-index)永远比没有定位的高. 2.如果两个元素都定位了,无论是相对定位还是绝对定位.他们的权限都是等权的. 3.两个相同定位的元素,除了z-ind ...
- 解决Android Studio Gradle Build Running慢的问题
Android Studio方便好用,但是Android Studio Gradle Build Running很慢 解决方法: C:\Users\你的用户名\.gradle 目录下新建一个文件名为 ...