`
wujianjun12315
  • 浏览: 112972 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java实现树的遍历

阅读更多
首先来看看树节点的定义:

TNode.java:

package datastructure.tree;

/**
*树节点
* @author yunfeiyang
*/
public class TNode<E> {

    private TNode<E> LChild = null, RChild = null;
    private E data;

    /**
     * default node
     */
    public TNode() {
        data = null;
        left(null);
        right(null);
    }

    /**
     * node with data
     * @param data data of the node
     */
    public TNode(E data) {
        this.data = data;
        left(null);
        right(null);
    }

    /**
     * set data of the node
     * @param data data of the node
     */
    public void data(E data) {
        this.data = data;
    }

    /**
     * get data of the node
     * @return data of the node
     */
    public E data() {
        return data;
    }

    /**
     *set the reference of left child
     * @param left reference of left child
     */
    public void left(TNode<E> left) {
        LChild = left;
    }

    /**
     * get reference of left child
     * @return reference of left child
     */
    public TNode<E> left() {
        return LChild;
    }

    /**
     *set the reference of right child
     * @param reference of right child
     */
    public void right(TNode<E> left) {
        RChild = left;
    }

    /**
     * get reference of right child
     * @return reference of right child
     */
    public TNode<E> right() {
        return RChild;
    }

    @Override
    public String toString() {
        String s = "a node with value:" + data.toString();
        return s;
    }
}

其次,树的遍历方法写在一个类当中:

TreeOutput.java:


package datastructure.tree;
import java.util.ArrayList;

/**
*遍历并输出树节点的值
* @author yunfeiyang
* @version 1.0
*/
public class TreeOutput<E> {
/**
* 中序遍历树节点
* @param root 树的根节点
* @param separate 分隔符
*/
    public void inorderOutput(TNode<E> root, String separate) {
        if (root == null) {
            return;
        }
        inorderOutput(root.left(), separate);
        System.out.print(root.data() + separate);
        inorderOutput(root.right(), separate);

    }
/**
* 后续遍历树节点
* @param root 树的根节点
* @param separate 分隔符
*/
    public void postorderOutput(TNode<E> root, String separate) {
        if (root == null) {
            return;
        }
        postorderOutput(root.left(), separate);
        postorderOutput(root.right(), separate);
        System.out.print(root.data() + separate);
    }
    /**
     * 前序遍历树节点
     * @param root 数的根节点
     * @param separate 分隔符
     */
     public void preorderOutput(TNode<E> root, String separate) {
        if (root == null) {
            return;
        }
        System.out.print(root.data() + separate);
        preorderOutput(root.left(), separate);
        preorderOutput(root.right(), separate);
      
    }
     /**
      * 层次遍历树节点
      * @param root 树的根节点
      * @param separate 分隔符
      */
     public void levelorderOutput(TNode<E> root, String separate) {
        if (root == null) {
            return;
        }
        ArrayList<TNode<E>> queue=new ArrayList<TNode<E>>();
        queue.add(root);
        while(!queue.isEmpty())
        {
            TNode<E> head=queue.remove(0);
            System.out.print(head.data()+separate);
            if(head.left()!=null)
            {
                queue.add(head.left());
            }
            if(head.right()!=null)
            {
                queue.add(head.right());
            }
        }
    }


}

最后写测试方法来测试下:

Main.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package datastructure.tree.test;

import datastructure.tree.TNode;
import datastructure.tree.TreeOutput;

/**
*
* @author Administrator
*/
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main main = new Main();
        TreeOutput<Integer> output = new TreeOutput<Integer>();
        TNode<Integer> newNode = new TNode<Integer>(0);
        TNode<Integer> root = main.initData(newNode);
        System.out.print("中序遍历树节点:");
        output.inorderOutput(root, ",");
        System.out.println();
        System.out.print("后序遍历树节点:");
        output.postorderOutput(root, ",");
        System.out.println();
        System.out.print("前序遍历树节点:");
        output.preorderOutput(root, ",");
        System.out.println();
        System.out.print("层次遍历树节点:");
        output.levelorderOutput(root, ",");
        System.out.println();
    }

    private TNode<Integer> initData(TNode<Integer> root) {
        TNode<Integer> result=null;
        if (root == null) {
            result=root;
        } else {
            TNode<Integer> leftNode = new TNode<Integer>(10);
            root.left(leftNode);
            TNode<Integer> rightNode = new TNode<Integer>(20);
            root.right(rightNode);
            leftNode.left(new TNode<Integer>(30));
            leftNode.right(new TNode<Integer>(40));
            rightNode.left(new TNode<Integer>(50));
            rightNode.right(new TNode<Integer>(60));
            result= root;
        }
         return result;
    }
}
分享到:
评论

相关推荐

    java多叉树的实现和遍历输出

    本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,我们需要定义一个多叉树节点类。这个类通常包含一个数据字段来存储节点值,以及一个ArrayList或LinkedList等动态数组来存储子节点。以下是一个...

    Java 构建与遍历树

    本示例代码展示了如何使用Java实现一个简单的二叉树,并提供了三种基本的遍历方法:先序遍历、中序遍历和后序遍历。 首先,我们创建一个名为`BinTreeTraverse2`的类,它包含一个内部类`Node`来表示二叉树的节点。每...

    Java实现二叉树的遍历

    java实现二叉树非递归前序中序后序遍历

    java实现二叉树遍历demo

    本示例"java实现二叉树遍历demo"将通过一个简单的实例来演示这三种遍历方式。 1. **前序遍历**: 前序遍历的顺序是:根节点 -&gt; 左子树 -&gt; 右子树。在代码实现中,通常采用递归的方法。首先访问根节点,然后递归地...

    Java实现先序遍历二叉树

    在Java中,实现二叉树的先序遍历可以通过递归来完成。先序遍历的顺序是:首先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。 在这段代码中,Node类定义了二叉树的节点,包含数据域和指向左右子...

    java实现二叉树遍历算法(源代码)

    ### Java实现二叉树遍历算法详解 #### 一、引言 在计算机科学中,二叉树是一种常用的数据结构,广泛应用于各种算法和数据处理场景。为了更好地理解和操作二叉树,掌握其遍历算法至关重要。本文将详细介绍如何使用...

    数据结构-二叉树Java实现及其遍历算法

    在计算机科学和程序设计领域,...通过Java语言实现二叉树的中序遍历是一个极佳的练习,它不仅帮助程序员熟悉数据结构的实现,还加深了对递归思想的理解。对于希望提升编程能力的开发者而言,这部分知识是不可或缺的。

    Java二叉树中序遍历

    本课程设计将详细介绍如何使用Java编程语言实现二叉树的中序遍历。 首先,我们先构建二叉树的节点类(Node),它包含一个数据字段(data)以及指向左子节点(left)和右子节点(right)的引用: ```java public ...

    java遍历文件目录生成树结构txt文件

    在Java编程中,遍历文件目录并生成树结构的文本文件是一个常见的任务,尤其是在处理大量文件数据时。这个任务可以通过使用Java的`java.io.File`类及其相关API来实现。`Dir.class`和`Dir.java`是这次操作的核心文件,...

    JAVA/Python实现二叉树遍历

    二叉树的遍历方式主要有四种:前序遍历、中序遍历、后序遍历和层次遍历。 前序遍历的顺序是:先访问根节点,然后访问左子树,最后访问右子树。前序遍历、中序遍历和后序...JAVA实现二叉树遍历 Python实现二叉树遍历

    java深度优先遍历

    在Java中,使用递归实现二叉树的DFS遍历(前序、中序、后序)如下: ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } // 前序遍历 public void ...

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

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

    java实现遍历树形菜单两种实现代码分享

    Java实现遍历树形菜单两种实现代码分享 Java实现遍历树形菜单是指在Java编程语言中实现遍历树形菜单的功能,树形菜单是一种常见的用户界面元素,用于展示层次结构的数据。下面将介绍两种实现遍历树形菜单的代码分享...

    java遍历文件树形结构输出

    综上所述,通过本篇文章的介绍,我们不仅了解了如何使用Java遍历文件夹中的所有文件并将它们以树形结构输出的基本实现,还深入探讨了相关的核心概念和技术细节。这对于理解和掌握文件系统的操作具有重要的意义。

    Java版二叉树遍历非递归程序

    ### Java版二叉树遍历非递归程序详解 #### 一、引言 在计算机科学领域中,二叉树是一种常见的数据结构,其在算法设计、数据存储以及搜索等方面有着广泛的应用。对于二叉树的操作,遍历是其中非常重要的一项技术。...

    树的前序遍历

    以下是使用JAVA实现的前序遍历代码示例: ```java public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public void preorderTraversal(TreeNode root) { if ...

    Java文件遍历以及树的三种非递归遍历, 前后序编码

    本教程将详细讲解这两个主题,包括Java如何进行文件遍历,以及如何使用非递归方法实现树的前序、中序和后序遍历。 首先,我们来看Java文件遍历。在Java中,`java.io.File`类提供了对文件和目录的操作。通过`list()`...

    Java递归算法遍历部门代码示例

    Java 递归算法遍历部门代码示例是指使用 Java 语言实现的递归算法来遍历部门树结构的示例代码。该示例代码主要用于介绍如何使用 Java 递归算法来遍历部门树结构,具有较高的借鉴价值。 知识点一:递归算法 递归...

    java二叉树的遍历

    在给定的代码中,作者提供了一个完整的Java实现,包括递归和非递归的前序、中序和后序遍历算法。下面将对这些算法进行详细的解释和分析。 递归前序遍历 递归前序遍历的算法可以描述为:访问当前节点,然后递归地...

    在java中 遍历mysql中的树形结构

    本文将深入探讨如何利用Java语言和MySQL数据库来实现这一功能,解析给定代码片段,并提供一种高效遍历树形结构的方法。 ### 一、理解树形结构 树形结构是一种非线性的数据结构,它由节点和边组成,其中每个节点...

Global site tag (gtag.js) - Google Analytics