首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

显示了在java中执行了BFS遍历的图的树结构。

在Java中执行BFS遍历的图的树结构可以通过以下步骤实现:

  1. 首先,我们需要定义一个图的数据结构,可以使用邻接表或邻接矩阵来表示图。邻接表是一种常用的表示方法,它使用一个数组来存储图中的所有顶点,每个顶点对应一个链表,链表中存储与该顶点相邻的顶点。
  2. 接下来,我们需要定义一个队列数据结构,用于存储待访问的顶点。可以使用Java中的LinkedList来实现队列。
  3. 创建一个布尔型数组visited,用于标记顶点是否已经被访问过。
  4. 从图中选择一个起始顶点,将其标记为已访问,并将其加入队列。
  5. 进入循环,直到队列为空。在每次循环中,取出队列的头部顶点,并访问该顶点。
  6. 遍历该顶点的所有邻接顶点,如果邻接顶点未被访问过,则将其标记为已访问,并将其加入队列。
  7. 重复步骤5和步骤6,直到队列为空。

下面是一个示例代码:

代码语言:java
复制
import java.util.*;

public class BFSTraversal {
    public static void main(String[] args) {
        // 创建图的邻接表表示
        Map<Integer, List<Integer>> graph = new HashMap<>();
        graph.put(1, Arrays.asList(2, 3));
        graph.put(2, Arrays.asList(4, 5));
        graph.put(3, Arrays.asList(6));
        graph.put(4, Arrays.asList());
        graph.put(5, Arrays.asList(7));
        graph.put(6, Arrays.asList());
        graph.put(7, Arrays.asList());

        // 执行BFS遍历
        bfsTraversal(graph, 1);
    }

    public static void bfsTraversal(Map<Integer, List<Integer>> graph, int start) {
        Queue<Integer> queue = new LinkedList<>();
        boolean[] visited = new boolean[graph.size() + 1];

        // 标记起始顶点为已访问,并加入队列
        visited[start] = true;
        queue.offer(start);

        while (!queue.isEmpty()) {
            int vertex = queue.poll();
            System.out.print(vertex + " ");

            // 遍历邻接顶点
            for (int neighbor : graph.get(vertex)) {
                if (!visited[neighbor]) {
                    visited[neighbor] = true;
                    queue.offer(neighbor);
                }
            }
        }
    }
}

以上代码中,我们使用了一个HashMap来表示图的邻接表,其中键表示顶点,值表示与该顶点相邻的顶点列表。然后,我们从起始顶点开始执行BFS遍历,使用一个队列来存储待访问的顶点,并使用一个布尔型数组visited来标记顶点是否已经被访问过。在遍历过程中,我们依次访问队列中的顶点,并将其邻接顶点加入队列,直到队列为空。

这是一个简单的BFS遍历图的树结构的示例,你可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)

    开门见山,本篇博客就介绍图相关的东西。图其实就是树结构的升级版。上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用。本篇博客我们就讲图的存储结构以及图的搜索,这两者算是图结构的基础。下篇博客会在此基础上聊一下最小生成树的Prim算法以及克鲁斯卡尔算法,然后在聊聊图的最短路径、拓扑排序、关键路径等等。废话少说开始今天的内容。 一、概述 在博客开头,我们先聊一下什么是图。在此我不想在这儿论述图的定义,当然那些是枯燥无味的。图在我们生活中无处不在呢,各种地

    010

    算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)

    前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容。本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示。本篇博客我们就来介绍树结构的一种:二叉树。在之前的博客中我们简单的聊了一点树的东西,树结构的特点是除头节点以外的节点只有一个前驱,但是可以有一个或者多个后继。而二叉树的特点是除头结点外的其他节点只有一个前驱,节点的后继不能超过2个。 本篇博客,我们只对二叉树进行讨论。在本篇博客中,我们对二叉树进行创建,然后进行各种遍历

    010
    领券