`

广度优先 深度优先访问 树

    博客分类:
  • Java
阅读更多

 

public class Tst {
	static TreeNode treeFactory() {
		TreeNode a = new TreeNode("a");
		TreeNode b = new TreeNode("b");
		TreeNode c = new TreeNode("c");
		TreeNode d = new TreeNode("d");
		TreeNode e = new TreeNode("e");
		TreeNode f = new TreeNode("f");
		TreeNode g = new TreeNode("g");
		TreeNode h = new TreeNode("h");
		
		a.children.add(b); a.children.add(c);
		
		b.children.add(d); b.children.add(e);
		c.children.add(f); c.children.add(g);
		
		e.children.add(h);
		
		return a;
	}
	static void printTreeDepthFirst(TreeNode root) {
		System.out.print(root);
		if(! root.children.isEmpty()) {
			for(TreeNode child : root.children)
				printTreeDepthFirst(child);
		}
	}
	
	static ArrayList<ArrayList<TreeNode>> row;
	static void printTreeWidthFirst(TreeNode root) {
		transferTree(root, 0);
		for(ArrayList<TreeNode> list : row) {
			for(TreeNode node : list)
				System.out.print(node);
		}
	}
	
	private static void transferTree(TreeNode root, int i) {
		putNode2row(root, i);
		if(! root.children.isEmpty()) {
			i++;
			for(TreeNode child : root.children)
				transferTree(child, i);
		}
	}
	private static void putNode2row(TreeNode node, int i) {
		if(row.size() <= i) {
			row.add(new ArrayList<TreeNode>());
		}
		row.get(i).add(node);
	}
	
	public static void main(String[] args) {
		printTreeDepthFirst(treeFactory());
		
		System.out.println();
		row = new ArrayList<ArrayList<TreeNode>>();
		printTreeWidthFirst(treeFactory());
		
	}
}
class TreeNode {
	List<TreeNode> children = new ArrayList<TreeNode>();
	String name;
	public TreeNode(String name) {
		this.name = name;
	}
	public String toString() {
		return name;
	}
}

 

输出 写道
abdehcfg
abcdefgh

 

上面代码中的广度优先的遍历,是先递归遍历,把递归的数据放到List的List中,转化为层的结构。空间和时间都使用的比较多。看了《数据结构P170》对图的广度优先遍历。可以使用Queue存当前层的节点,优化这个方法:

 

	static void printTreeWidthFirst(TreeNode root) {
		Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
		queue.add(root);
		System.out.print(root);
		while(!queue.isEmpty()) {
			root = queue.poll();
			for(TreeNode child : root.children) {
				System.out.print(child);
				queue.add(child);
			}
		}
	}

 

分享到:
评论

相关推荐

    求无向图的深度优先生成树和广度优先生成树

    无向图的深度优先生成树(DFS,Depth-First Search)和广度优先生成树(BFS,Breadth-First Search)是图论中的两种基本遍历算法,广泛应用于计算机科学,特别是在数据结构和算法设计中。这两种方法用于访问图的所有...

    图的深度优先遍历和广度优先遍历算法

    "图的深度优先遍历和广度优先遍历算法" 图的深度遍历和广度遍历是两个重要的算法,这也是我们理解并掌握图这一数据结构的基础。通过此程序算法可以进一步掌握图的构造以及遍历的相关知识。 图的深度优先遍历算法 ...

    图的深度优先和广度优先搜索动态演示图3张

    深度优先搜索是一种探索图或树的递归策略,从起点开始,尽可能深地搜索图的分支。当路径到达叶子节点或者回溯到一个未被完全探索的节点时,才会转向其他分支。DFS通常使用栈来辅助实现。其步骤如下: 1. 从起始节点...

    二叉树的深度优先搜索与广度优先搜索实现

    二叉树的深度优先搜索与广度优先搜索实现 二叉树搜索是计算机科学中的一种常见的搜索算法,用于遍历二叉树中的所有节点。二叉树搜索可以分为深度优先搜索和广度优先搜索两种方式。本文将详细介绍二叉树的深度优先...

    无向图建立、深度优先遍历和广度优先遍历实现算法[借鉴].pdf

    无向图建立、深度优先遍历和广度优先遍历实现算法 本文将详细介绍无向图的建立、深度优先遍历和广度优先遍历的实现算法。这些算法是数据结构中非常重要的内容,掌握它们对后续学习和应用非常重要。 一、无向图的...

    图的深度优先和广度优先遍历

    图的深度优先和广度优先遍历 本文主要讨论图的深度优先遍历和广度优先遍历的算法实现,包括获取图的所有边、输出邻接矩阵、图的深度遍历和广度优先遍历的实现。 获取图的所有边 在获取图的所有边时,我们需要定义...

    图的深度、广度优先遍历(c语言)

    深度优先遍历是一种递归的图遍历算法,它从一个初始顶点出发,尽可能深地搜索树的分支。当遇到叶子节点或者无法继续前进时,它会回溯到上一层,再沿着未探索过的路径继续搜索。DFS的主要过程如下: 1. **初始化**:...

    迷宫深度优先和广度优先

    本项目利用JavaScript实现了一个动态展示的迷宫求解器,分别运用了深度优先搜索(DFS)和广度优先搜索(BFS)两种策略。下面我们将详细探讨这两种算法及其在迷宫求解中的应用。 首先,深度优先搜索(DFS)是一种...

    图的广度优先,深度优先算法 c语言描述

    图的遍历是图论中的基础操作,主要分为两种经典的搜索策略:广度优先搜索(Breadth-First Search, BFS)和深度优先搜索(Depth-First Search, DFS)。这两种算法在解决各种图相关的实际问题中起着至关重要的作用,如...

    第六次深度优先广度优先.pdf

    ### 深度优先与广度优先搜索算法详解 #### 一、引言 在计算机科学领域,图的遍历是一种基本的操作,用于系统地访问图中的所有节点。本篇文章将详细介绍两种常用的图遍历算法——深度优先搜索(Depth-First Search, ...

    图的遍历,深度优先搜索,广度优先搜索,生成最小生成树

    总之,图的遍历、深度优先搜索、广度优先搜索和生成最小生成树是图论和算法基础的重要组成部分,它们在许多计算问题中都有应用,如网络路由、社交网络分析、软件工程等。理解和掌握这些概念有助于提升编程能力,解决...

    图的存储与深度优先与广度优先遍历

    ### 图的存储与深度优先与广度优先遍历 #### C++实现的图的存储结构 在本篇文章中,我们将探讨图数据结构的存储方法及其两种主要的遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。图是一种非线性的数据结构...

    邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历

    - `DFS(ALGraph G, int v)`和`BFS(ALGraph G, int v)`分别执行深度优先和广度优先遍历,输出访问序列。 - 边集的输出函数`DFSB(ALGraph G, int v)`和`BFSB(ALGraph G, int v)`记录遍历过程中形成的边。 7. **测试...

    邻接表表示的图的深度优先搜索和广度优先搜索程序

    邻接表表示的图的深度优先搜索和广度优先搜索程序 这篇文章介绍了使用邻接表表示的图的深度优先搜索和广度优先搜索程序,旨在帮助读者理解图的深度优先搜索和广度优先搜索算法的实现。 首先,文章定义了图的邻接表...

    图的创立数据结构对其进行深度优先遍历和广度优先遍历

    在本文中,我们将深入探讨图的数据结构以及如何对图进行深度优先遍历(DFS)和广度优先遍历(BFS)。首先,我们要理解图的基本概念。图是一种数据结构,用于表示对象之间的关系,其中的对象称为顶点或节点,而它们...

    java 深度优先遍历、广度优先遍历、最短路径、最小生成树

    本文将深入探讨Java中实现的四个核心图算法:深度优先遍历(DFS)、广度优先遍历(BFS)、最短路径算法以及最小生成树算法。 首先,**深度优先遍历(DFS)**是一种用于遍历或搜索树或图的算法。它从根节点开始,尽...

    C++无向图深度优先和广度优先遍历(编译可运行).rar

    以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。 注: 1.代码共182行。 2.代码经过多次编译运行,无错误。

    用深度优先、广度优先算法解决八数码问题

    本项目结合了两种搜索算法:深度优先搜索(DFS)和广度优先搜索(BFS),来解决这个问题。这两种算法都是图或树搜索的基本策略,用于寻找从初始状态到达目标状态的路径。 深度优先搜索是一种递归的策略,它尽可能深...

    图的遍历,包括深度优先和广度优先遍历

    在这个主题下,我们将深入探讨深度优先遍历(DFS, Depth First Search)和广度优先遍历(BFS, Breadth First Search),以及在树结构中常见的先序、中序和后序遍历。这些遍历方法各有其特点,适用于不同的问题场景。...

    深度广度优先搜索

    深度优先搜索(DFS,Depth-First Search)与广度优先搜索(BFS,Breadth-First Search)是图论中的两种基本搜索算法,广泛应用于计算机科学领域,尤其是在解决图和树的遍历问题时。这两种算法都是用来探索图的所有...

Global site tag (gtag.js) - Google Analytics