`

逐层遍历一棵二叉树,要求相邻两层遍历方向相反(java)

阅读更多
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 + '}';
    }

}

 

分享到:
评论

相关推荐

    5.3_2_二叉树的层次遍历1

    二叉树的层次遍历,也被称为二叉树的广度优先搜索(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`...

    C语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等

    冒泡排序是一种简单的交换排序,通过重复遍历数组,比较相邻元素并交换位置来逐步将大元素“冒泡”到数组的一端。虽然冒泡排序的时间复杂度较高,但它的实现简单,适合教学目的。快速排序则是一种更高效的排序算法,...

    10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等

    这些文件包含了数据结构课程设计中的核心内容,包括二叉树的各种遍历算法、排序算法以及一个括号匹配问题。下面将详细阐述这些知识点。 首先,我们来看二叉树的建立和遍历。二叉树是一种重要的数据结构,它由节点...

    图与遍历算法

    无向图是图论的基础,它的边没有方向,可以连接任意两个顶点。无向图的度是某个顶点所连接的边的数量。例如,如果一个顶点有三条边,那么它的度就是3。欧拉图是所有边都是偶数度的无向图,这样的图可以从任意顶点...

    数据结构 图的深度优先遍历和广度优先遍历 .zip

    广度优先遍历则是一种从起点开始,逐层遍历图中所有节点的方法。BFS首先访问起始节点,然后访问所有与起始节点相邻的节点,接着访问这些相邻节点的相邻节点,依此类推,直到访问完所有节点。BFS通常使用队列来辅助...

    链式存储二叉树基本操作函数.rar

    5. **计算叶子节点和结点数目**:遍历二叉树,对每个节点进行计数。叶子节点是没有任何子节点的节点。结点总数等于所有节点的数量,包括叶子节点和非叶子节点。 6. **二叉树查找**:从根节点开始,根据节点值的比较...

    10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.zip

    它选取一个“基准”值,将数组分成比基准小和比基准大的两部分,然后对这两部分递归进行排序,最终得到排序好的数组。 "括号匹配.c"可能涉及到字符串处理,尤其是关于有效括号序列的检查。这个问题常见于编译原理和...

    各种数据结构(包括栈,队列,二叉树,二分查找,哈夫曼树,图遍历)C语言的实现的源代码

    DFS从一个节点出发,尽可能深地探索图的分支,而BFS则从起始节点开始,逐层探索所有相邻节点。C语言中可以使用递归或队列来实现这两种遍历。 这些C语言实现的源代码可以帮助我们深入理解数据结构的工作原理,同时也...

    树和二叉树

    - **定义**:二叉树是由一组节点组成的一个集合,这个集合或者为空,或者由一个根节点和两棵互不相交的左右子树组成。 - **性质**: - 每个节点最多有两个子节点。 - 左右子树是有区别的。 - 可能存在空节点。 -...

    数据结构(java版)习题解答

    - **解答**:遍历二叉树,确保每个结点的值都符合二叉排序树的规则。 #### 第9章 排序 **习9.1:判断一个数据序列是否为最小堆序列** - **题目**:判断一个序列是否构成最小堆。 - **解答**:遍历序列,确保每个父...

Global site tag (gtag.js) - Google Analytics