`

数据结构学习笔记-二叉树的遍历(JAVA)

    博客分类:
  • Java
 
阅读更多

二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。
两种遍历:
递归遍历和层次遍历.
前序:根左右
中序:左根右
后序:左右根
public class Tree
{
    public Tree mLeft;
    public Tree mRight;
    private Data mData;
    public List<Tree> treeList = new ArrayList<Tree>();
    public static final int MAX = 40;
    // 层次遍历时保存各个节点
    Tree[] elements = new Tree[MAX];
    // 层次遍历时队首
    int front;
    // 层次遍历时队尾
    int rear;
    public Tree(Tree left, Tree right, Data data)
    {
        this.mLeft = left;
        this.mRight = right;
        this.mData = data;
    }
    public Tree(Tree left, Tree right, String data)
    {
        this.mLeft = left;
        this.mRight = right;
        this.mData = new Data(data);
    }
    // 前序遍历,根左右
    public void preOrder(Tree parent)
    {
        if (parent == null)
            return;
        System.out.print(parent.mData.desc + " ");
        preOrder(parent.mLeft);
        preOrder(parent.mRight);
    }
    // 中序遍历,左根右
    public void inOrder(Tree parent)
    {
        if (parent == null)
            return;
        inOrder(parent.mLeft);
        System.out.print(parent.mData.desc + " ");
        inOrder(parent.mRight);
    }
    // 后序遍历,左右根
    public void postOrder(Tree parent)
    {
        if (parent == null)
            return;
        postOrder(parent.mLeft);
        postOrder(parent.mRight);
        System.out.print(parent.mData.desc + " ");
    }
    // 遍历treeList并生成下次要遍历的
    public void layerOrder()
    {
        if (treeList.isEmpty())
            return;
        List<Tree> buff = new ArrayList<Tree>();
        for (Tree t : treeList)
        {
            if (t != null)
            {
                System.out.print(t.mData.desc + " ");
                buff.add(t.mLeft);
                buff.add(t.mRight);
            }
        }
        treeList.clear();
        if (!buff.isEmpty())
        {
            treeList.addAll(buff);
            layerOrder();
        }
    }
    // 另外一种利用数组 层次遍历的实现
    public void layerOrder1(Tree parent)
    {
        elements[0] = parent;
        front = 0;
        rear = 1;
        while (front < rear)
        {
            if (elements[front].mData != null)
            {
                System.out.print(elements[front].mData.desc + " ");
                if (elements[front].mLeft != null)
                {
                    elements[rear++] = elements[front].mLeft;
                }
                if (elements[front].mRight != null)
                {
                    elements[rear++] = elements[front].mRight;
                }
                front++;
            }
        }
    }
    public static class Data
    {
        public String desc;
        public Data(String s)
        {
            this.desc = s;
        }
        @Override
        public String toString()
        {
            return desc;
        }
    }
}


public class TreeMain
{
    public static void main(String[] args)
    {
        Tree d = new Tree(null, null, "D");
        Tree e = new Tree(null, null, "E");
        Tree f = new Tree(null, null, "F");
        Tree g = new Tree(null, null, "G");
        Tree b = new Tree(d, e, "B");
        Tree c = new Tree(f, g, "C");
        Tree a = new Tree(b, c, "A");
        a.preOrder(a);
        System.out.println("");
        a.inOrder(a);
        System.out.println("");
        a.postOrder(a);
        System.out.println("");
        a.treeList.add(a);
        a.layerOrder();
    }
}
分享到:
评论

相关推荐

    Java基础复习笔记08数据结构-二叉树和二叉树的遍历

    ### Java基础复习笔记08数据结构-二叉树和二叉树的遍历 #### 一、二叉树概述 二叉树(Binary Tree)是一种重要的数据结构,在计算机科学中有广泛的应用。二叉树中的每个节点最多有两个子节点,分别称为左子节点和右...

    java数据结构和算法学习笔记

    ### Java数据结构与算法学习笔记知识点总结 #### 一、数据结构概述 数据结构是对数据的一种组织形式,它决定了数据的存储方式以及处理数据的方法。常见的数据结构包括但不限于数组、链表、栈、队列、二叉树、图等...

    数据结构高分笔记part1

    7. **实际应用**:最后,笔记可能会将这些理论知识与实际编程语言(如C++、Java或Python)结合,通过示例代码解释如何实现这些数据结构和算法。 由于笔记名为“数据结构高分笔记”,它很可能会重点强调考试中的常见...

    数据结构与算法-学习笔记 Java 版.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    Java数据结构和算法-学习笔记

    ### Java数据结构与算法——学习笔记 #### 一、引言 在计算机科学领域,**数据结构**与**算法**是两个极其重要的概念。数据结构指的是数据的组织方式,而算法则是解决特定问题的一系列步骤。这两者是编程的基础,...

    数据结构java语言描述课后答案.docx

    标题提及的是“数据结构java语言描述课后答案”,这通常指的是学生在学习数据结构课程时,针对教材或课堂讲解的习题解答。这些答案涵盖了数据结构的基本概念、逻辑结构、存储结构以及算法的时间和空间复杂度分析。 ...

    数据结构与算法分析 Java语言描述 读书笔记

    - **树**:分层的数据结构,包括二叉树、平衡树(AVL、红黑树)、堆等,适用于搜索和排序。 - **图**:用于表示对象之间的关系,如网络路由、社交网络等。 3. **算法详解**: - **排序算法**:包括冒泡排序、...

    408考试数据结构高分笔记2019版(天勤论坛)

    此外,笔记还会强调实际编程实现,包括C++或Java等语言的数据结构实现,如链表的插入、删除、遍历,树的构建与遍历,图的邻接矩阵和邻接表表示,以及各种排序和查找算法的代码实现。这部分内容有助于考生提升编程...

    《数据结构和问题求解(Java语言版)(第四版)》源码

    这些源码文件涵盖了数据结构、算法、文件压缩、表达式求值、字符串处理和游戏策略等多个领域,为学习和实践Java编程以及计算机科学基础知识提供了宝贵的资源。通过阅读和理解这些代码,读者不仅可以提升Java编程技能...

    数据结构算法Java实现。关于Java《数据结构算法》核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。.zip

    在“大学生数据结构学习笔记和资料大全!”中,你可能会找到以下内容: - 数据结构的基本概念和性质 - 各种数据结构的实现原理 - Java代码示例,展示如何创建和操作这些数据结构 - 常见算法的分析和Java实现 - 实际...

    《恋上数据结构》第1季度 + 第2季 完整学习笔记,从0实现的 Java 数据结构大全。.zip

    这份资料涵盖了C/C++/JAVA/Python等多种编程语言的数据结构学习,是编程初学者的宝贵资源。 在数据结构的学习中,我们首先要理解的是数据结构的基本概念。数据结构是计算机存储、组织数据的方式,它研究如何在...

    Java基础复习笔记09数据结构-哈夫曼树

    ### Java基础复习笔记09数据结构-哈夫曼树 #### 1. 哈夫曼树概述 哈夫曼树是一种特殊的二叉树,它在计算机科学领域有着广泛的应用,尤其是在数据压缩方面。哈夫曼树也被称为最优二叉树,其构建原则是使得带权路径...

    [网盘]算法笔记-上机训练实战指南-胡凡 完整版.2018_03_19

    根据提供的文件信息,本文将对《算法笔记-上机训练实战指南》这本书进行详细的知识点梳理,主要包括但不限于:算法基础知识、数据结构应用、经典算法详解、编程实践技巧等内容。 ### 一、算法基础知识 #### 1.1 ...

    算法和数据结构学习笔记.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    数据结构与问题求解Java语言版第4版

    通过学习《数据结构与问题求解Java语言版第4版》,读者将能够熟练掌握数据结构的核心概念,学会如何选择合适的数据结构解决具体问题,并具备使用Java实现这些结构的能力。这本书对于计算机科学专业的学生和Java...

    算法笔记和算法笔记-上机训练实战指南整套-胡凡

    3. **图论与树**:讲解了图的遍历(深度优先搜索和广度优先搜索)、最小生成树(Prim算法或Kruskal算法)、最短路径(Dijkstra算法、Floyd-Warshall算法)以及二叉树的遍历和平衡树等概念。 4. **动态规划**:介绍...

    常见数据结构与算法的Python实现及学习笔记.zip

    本资源包"常见数据结构与算法的Python实现及学习笔记.zip"聚焦于使用Python语言来阐述这些概念,这对于Python开发者或者正在学习Python的学生来说是一份宝贵的资源。下面,我们将深入探讨其中涵盖的一些关键知识点。...

    数据结构笔记和课后答案

    - 学习各种典型的数据结构,例如数组、链表、栈、队列、二叉树等,并了解它们的特点和应用场景。 - 掌握算法设计的基本方法,如递归、分治法、贪心算法等。 - 通过实践编程来加深理解和记忆,如实现常见的排序...

Global site tag (gtag.js) - Google Analytics