就是按照正常顺序把tree打出来,假设有个tree是
1
/ \
2 3
/ \ / \
4 5 6 7
打印出来就是 1,2,3,4,5,6,7;
这个就是宽度优先
package org.iaiai.suanfa;
import java.util.LinkedList;
/**
*
* <p>
* Title: Node.java
* </p>
* <p>
* E-Mail: 176291935@qq.com
* </p>
* <p>
* QQ: 176291935
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2011-8-5
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class Node {
public int level = 0;
public String path = " ";
public LinkedList<Node> children = new LinkedList<Node>();
public String value = " ";
public String name = " ";
/**
*
* @param val
* 第几级
* @param name
* 名子
* @param parent
* 父级
*/
public Node(String val, String name, Node parent) {
this.value = val;
this.name = name;
if (parent != null) {
parent.addChild(this);
path = parent.path + " " + name;
} else
path = name;
}
public void addChild(Node child) {
children.add(child);
}
}
package org.iaiai.suanfa;
import java.util.LinkedList;
import java.util.List;
/**
*
* <p>
* Title: Main.java
* </p>
* <p>
* E-Mail: 176291935@qq.com
* </p>
* <p>
* QQ: 176291935
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2011-8-5
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class Main {
public static void main(String[] args) throws Exception {
int n = 3;
String[] str = { "1", "2", "3" };
Node A = new Node("1", "A", null);
Node B = new Node("2", "B", A);
Node C = new Node("2", "C", A);
new Node("3", "B1", B);
new Node("x", "B2", B); // x为不显示
new Node("x", "B3", B);
new Node("3", "B4", B);
new Node("x", "C1", C);
new Node("3", "C2", C);
new Node("x", "C3", C);
new Node("3", "C4", C);
new Node("3", "C5", C);
List<Node> queue = new LinkedList<Node>();
if (A.value.equals(str[A.level]))
queue.add(A);
while (queue.size() > 0) {
Node cur = queue.remove(0);
LinkedList<Node> children = cur.children;
for (int i = 0; i < children.size(); i++) {
if (children.get(i).value.equals(str[cur.level + 1])) {
if (cur.level + 1 == n - 1)
System.out.println(children.get(i).path);
else {
children.get(i).level = cur.level + 1;
queue.add(children.get(i));
}
}
}
}
}
}
输出:
引用
A B B1
A B B4
A C C2
A C C4
A C C5
分享到:
相关推荐
java广度优先搜索详细介绍.txt
本文将深入探讨Java中实现的四个核心图算法:深度优先遍历(DFS)、广度优先遍历(BFS)、最短路径算法以及最小生成树算法。 首先,**深度优先遍历(DFS)**是一种用于遍历或搜索树或图的算法。它从根节点开始,尽...
java实现的广度优先算法的例子
广度优先搜索(BFS)java实现
**广度优先搜索(Breadth-First Search, BFS)**是一种在图或树中进行遍历的算法,常用于解决寻找最短路径、访问所有节点等问题。在ACM/ICPC(国际大学生程序设计竞赛)中,BFS是解决许多问题的关键技术之一,尤其在...
本文将深入探讨如何使用Java实现图的邻接矩阵以及如何在该数据结构上执行广度优先搜索(BFS)。 **邻接矩阵** 邻接矩阵是一种二维数组,它用来表示图中顶点之间的连接。如果图是无向的,邻接矩阵是对称的;如果图...
二叉树的深度优先搜索与广度优先搜索实现 二叉树搜索是计算机科学中的一种常见的搜索算法,用于遍历二叉树中的所有节点。二叉树搜索可以分为深度优先搜索和广度优先搜索两种方式。本文将详细介绍二叉树的深度优先...
根据遍历方式的不同,图的遍历可以分为深度优先遍历(DFS)和广度优先遍历(BFS)。本文将深入探讨这两种遍历方法,并提供其在Java中的实现。 ### 图的深度优先遍历(DFS) 深度优先遍历是一种递归地访问图中的...
本教程主要探讨如何使用Java编程语言实现深度优先和广度优先的网页爬虫。 首先,我们来理解深度优先搜索(DFS, Depth First Search)和广度优先搜索(BFS, Breadth First Search)的基本概念: 深度优先搜索是一种...
通过广度优先遍历解决八数码问题 在计算机科学和人工智能领域中,对于搜索问题的解决方法有很多,广度优先遍历(Breadth-First Search,BFS)是一种常用的方法。八数码问题(Eight Puzzle)是一种经典的搜索问题,...
Java中的广度优先遍历(BFS)是一种用于遍历或搜索树或图的算法,其特点是先访问离根节点近的节点,然后再访问远的节点。在寻找图中两个节点间的最短路径问题上,BFS能有效地解决非负权图的最短路径问题,因为它总是...
本篇文章将深入探讨如何使用Java来实现二叉树的深度优先遍历(DFS, Depth First Search)和广度优先遍历(BFS, Breadth First Search)。 **深度优先遍历** 是一种在图或树中搜索的方法,它尽可能深地探索树的分支...
深度优先搜索和广度优先搜索在许多问题中都有应用,例如检测图中的环、找到最短路径、查找连通组件等。在Java中,这两种算法的实现都需要考虑效率和空间复杂性,以适应不同的问题需求。通过理解这些概念并熟练使用...
【标题】:“广度优先搜索学习五例之二(JAVA)” 在计算机科学中,图算法是解决问题的关键工具之一,而广度优先搜索(Breadth-First Search, BFS)是一种用于遍历或搜索树或图的算法。本篇文章将重点讲解如何在...
标题 "九宫问题的广度优先java实现" 指示我们要解决的是九宫格问题,并且采用的是Java语言中的广度优先搜索策略。这是一种用于遍历或搜索树或图的算法,通常用于找出所有可能的解或找到最短路径。 描述 "这是一个...
通过不断执行这个过程,直到队列为空,我们就完成了广度优先搜索。 在示例代码中,我们以顶点0作为起始顶点调用bfs(0)方法进行遍历。最终的输出结果将会是按照广度优先搜索顺序遍历的顶点序列。
在本文中,我们将深入探讨图的数据结构以及如何对图进行深度优先遍历(DFS)和广度优先遍历(BFS)。首先,我们要理解图的基本概念。图是一种数据结构,用于表示对象之间的关系,其中的对象称为顶点或节点,而它们...
图的广度优先遍历(Breadth-First Search,简称BFS)是一种在图中寻找最短路径或遍历所有节点的算法。它从一个起始节点开始,沿着图的边逐层向外扩展,直到访问到所有节点为止。这个过程可以形象地比喻为在森林中,...
根据给定的信息,本文将详细解释深度优先遍历(Depth-First Search, DFS)与广度优先遍历(Breadth-First Search, BFS)这两种图的遍历算法,并给出相应的Java实现示例。 ### 深度优先遍历(DFS) #### 定义 深度...
本文通过JAVA实现了一个基于广度优先算法的多线程爬虫程序。为何要使用多线程,以及如何实现多线程;系统实现过程中的数据存储;网页信息解析等。 通过实现这一爬虫程序,可以搜集某一站点的URLs,并将搜集到的...