import java.util.ArrayList; import java.util.List; import java.util.Stack; /** * * @author zhongchenghui */ public class BTreeTraversal { public static void main(String[] args) { Node root = new Node("a"); Node b = new Node("b"); Node c = new Node("c"); root.setLeft(b); root.setRight(c); Node d = new Node("d"); Node e = new Node("e"); b.setLeft(d); b.setRight(e); Node f = new Node("f"); c.setLeft(f); Node g = new Node("g"); Node h = new Node("h"); d.setLeft(g); d.setRight(h); Node i = new Node("i"); Node j = new Node("j"); f.setLeft(i); f.setRight(j); Node k = new Node("k"); Node l = new Node("l"); j.setLeft(k); j.setRight(l); traversal(root); } public static void traversal(Node root) { List<Node> result = new ArrayList<>(); boolean status = true; Stack<Node> layerNodes = new Stack<>(); layerNodes.add(root); while (layerNodes.size() > 0) { result.addAll(layerNodes); layerNodes = getNextLayer(layerNodes, status); status = !status; } System.out.println(result); } public static Stack<Node> getNextLayer(Stack<Node> stack, boolean status) { Stack<Node> layerNodes = new Stack(); while (stack.size() > 0) { Node node = stack.pop(); if (status) { if (node.right != null) { layerNodes.add(node.right); } if (node.left != null) { layerNodes.add(node.left); } } else { if (node.left != null) { layerNodes.add(node.left); } if (node.right != null) { layerNodes.add(node.right); } } } return layerNodes; } }
public class Node { String value; Node left; Node right; public Node(String value) { this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Node getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public Node getRight() { return right; } public void setRight(Node right) { this.right = right; } @Override public String toString() { return "Node{" + "value=" + value + '}'; } }
相关推荐
二叉树的层次遍历,也被称为二叉树的广度优先搜索(BFS),是一种按照从上到下、从左到右的顺序对二叉树进行逐层访问的算法。这种遍历方法广泛应用于数据结构和算法领域,特别是在解决各种问题时,如查找最近公共...
二叉树遍历和图遍历是数据结构与算法领域中的重要概念,广泛应用于软件开发、计算机科学教学以及各种计算问题的求解。本系统旨在通过动态演示来帮助理解和掌握这两种遍历方法,并且提供了完整的C语言算法描述,以...
2. **广度优先搜索(BFS)**:从一个节点开始,逐层探索所有相邻节点,然后再进入下一层。BFS常用于查找最短路径问题。 接下来,我们转向排序算法。排序是将一组数据按照特定顺序排列的过程,对于数据处理和分析至...
二叉树遍历是计算机科学中处理树形结构数据时常用的一种操作,它分为深度优先搜索(DFS)和广度优先搜索(BFS)两种方式。本篇文章将重点关注广度优先搜索,即“二叉树遍历广度优先”。 广度优先搜索(BFS)是一种...
2. 广度优先搜索(BFS):从起点开始,逐层访问所有相邻节点,然后再访问下一层的节点。BFS通常使用队列来实现。 这两种图遍历方法在寻找最短路径、判断连通性等问题中发挥着重要作用。 在停车场课程设计中,涉及...
**广度优先搜索(Breadth-First Search, BFS)**:BFS从根节点开始,逐层遍历所有节点。在每一层中,它先访问左子节点,然后访问右子节点。BFS常用于寻找最短路径问题,如求两节点间的最短距离。 在给定的压缩包...
在传统的层次遍历基础上,锯齿形层次遍历则要求对每一层节点的访问顺序进行调整。在实际的算法实现中,我们利用双端队列来实现这一需求。双端队列支持在队列的两端进行元素的插入和删除操作,这为我们在遍历过程中...
#### 一、二叉树的遍历 **1.1 二叉树的存储结构** 二叉树的存储结构主要包括两种:顺序存储结构和链式存储结构。 **1.1.1 顺序存储结构** 在顺序存储结构中,通常将二叉树中的节点按照满二叉树的形式自上而下、...
边可以是有向的(箭头指示方向)或无向的(没有方向),还可以带有权重,表示两个顶点之间的关联程度或距离。 2. **图的表示**:通常,图可以使用邻接矩阵或邻接表来存储。邻接矩阵是一个二维数组,其中的元素表示...
一种常见的方法是使用层次遍历(广度优先搜索,BFS),通过队列来逐层处理节点,每层的节点水平排列,相邻层之间适当错开,以达到视觉上的层次效果。 二叉树的显示则通常依赖于图形库,例如Python中的`matplotlib`...
冒泡排序是一种简单的交换排序,通过重复遍历数组,比较相邻元素并交换位置来逐步将大元素“冒泡”到数组的一端。虽然冒泡排序的时间复杂度较高,但它的实现简单,适合教学目的。快速排序则是一种更高效的排序算法,...
这些文件包含了数据结构课程设计中的核心内容,包括二叉树的各种遍历算法、排序算法以及一个括号匹配问题。下面将详细阐述这些知识点。 首先,我们来看二叉树的建立和遍历。二叉树是一种重要的数据结构,它由节点...
无向图是图论的基础,它的边没有方向,可以连接任意两个顶点。无向图的度是某个顶点所连接的边的数量。例如,如果一个顶点有三条边,那么它的度就是3。欧拉图是所有边都是偶数度的无向图,这样的图可以从任意顶点...
广度优先遍历则是一种从起点开始,逐层遍历图中所有节点的方法。BFS首先访问起始节点,然后访问所有与起始节点相邻的节点,接着访问这些相邻节点的相邻节点,依此类推,直到访问完所有节点。BFS通常使用队列来辅助...
5. **计算叶子节点和结点数目**:遍历二叉树,对每个节点进行计数。叶子节点是没有任何子节点的节点。结点总数等于所有节点的数量,包括叶子节点和非叶子节点。 6. **二叉树查找**:从根节点开始,根据节点值的比较...
它选取一个“基准”值,将数组分成比基准小和比基准大的两部分,然后对这两部分递归进行排序,最终得到排序好的数组。 "括号匹配.c"可能涉及到字符串处理,尤其是关于有效括号序列的检查。这个问题常见于编译原理和...
DFS从一个节点出发,尽可能深地探索图的分支,而BFS则从起始节点开始,逐层探索所有相邻节点。C语言中可以使用递归或队列来实现这两种遍历。 这些C语言实现的源代码可以帮助我们深入理解数据结构的工作原理,同时也...
- **定义**:二叉树是由一组节点组成的一个集合,这个集合或者为空,或者由一个根节点和两棵互不相交的左右子树组成。 - **性质**: - 每个节点最多有两个子节点。 - 左右子树是有区别的。 - 可能存在空节点。 -...
- **解答**:遍历二叉树,确保每个结点的值都符合二叉排序树的规则。 #### 第9章 排序 **习9.1:判断一个数据序列是否为最小堆序列** - **题目**:判断一个序列是否构成最小堆。 - **解答**:遍历序列,确保每个父...