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

/*
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. Mac系统 安装SVN

  2. HDU 1712 ACboy needs your help(分组背包)

    题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部 ...

  3. 【Oracle】去除表中重复的数据

    删除表重复数据 (t1表中有重复数据)1.使用distinct create table t2 as select * from t1;create table tmp_t2 as select di ...

  4. 洛谷 P1387 最大正方形 Label:奇怪的解法

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  5. NOI 题库 7218

    7218  献给阿尔吉侬的花束 描述 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫.今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜 ...

  6. 【POJ1185】炮兵阵地 状压DP

    感觉总是被一些SB错误所困扰... 差不多还是(模板题)注意数组空间的大小,和对于合法状态的判断. f[i][j][k]=max(f[i][k][j],f[i-1][l][k]+num[j]) (f[ ...

  7. python 反射器

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: zengchunyun ""& ...

  8. Test Driven Development

    链接:https://msdn.microsoft.com/zh-tw/library/dn743856.aspx

  9. Hibernate学习笔记4

    一.关于联合主键的映射测试实例 实体类: package com.***.comBineKey;public class Person { private Person_pk pk; private ...

  10. php经典算法(转载)

    //--------------------  // 基本数据结构算法 //--------------------  //二分查找(数组里查找某个元素)  function bin_sch($arr ...