Java二叉树的四种遍历方式详解

yizhihongxing

Java二叉树的四种遍历方式详解

二叉树是一种常见的数据结构,在Java中也有很多实现方式。对二叉树进行遍历是必不可少的操作,Java提供了四种不同的遍历方式,这篇文章会详细讲解这四种方法,以及对应的代码实现和示例说明。

什么是二叉树

二叉树是一种树结构,其每个结点最多只有两个子节点。其中一个为左子节点,一个为右子节点。

每个结点都由三部分组成:一个数据域、左子树和右子树。左子树和右子树同样是二叉树,其结点也由三部分组成:一个数据域、左子树和右子树。

代码实现

在Java中,我们可以通过类似下面的代码来定义一个二叉树节点的类:

class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    public TreeNode(int val){
        this.val = val;
        this.left = null;
        this.right = null;
    }
}

二叉树的四种遍历方式

先序遍历

先序遍历是指对二叉树的遍历方式是“根节点->左子树->右子树”。

先序遍历可以通过递归实现,对于每个结点,先输出该结点的数据域,然后递归遍历该结点的左子树和右子树。

public void preorderTraversal(TreeNode root){
    if(root == null){
        return;
    }
    System.out.print(root.val+" ");
    preorderTraversal(root.left);
    preorderTraversal(root.right);
}

中序遍历

中序遍历是指对二叉树的遍历方式是“左子树->根节点->右子树”。

中序遍历同样可以通过递归实现,对于每个结点,先递归遍历该结点的左子树,然后输出该结点的数据域,最后递归遍历该结点的右子树。

public void inorderTraversal(TreeNode root){
    if(root == null){
        return;
    }
    inorderTraversal(root.left);
    System.out.print(root.val+" ");
    inorderTraversal(root.right);
}

后序遍历

后序遍历是指对二叉树的遍历方式是“左子树->右子树->根节点”。

后序遍历同样可以通过递归实现,对于每个结点,先递归遍历该结点的左子树和右子树,然后输出该结点的数据域。

public void postorderTraversal(TreeNode root){
    if(root == null){
        return;
    }
    postorderTraversal(root.left);
    postorderTraversal(root.right);
    System.out.print(root.val+" ");
}

层次遍历

层次遍历是指对二叉树的遍历方式是按照层次从上到下,从左到右进行遍历,每层结点从左到右输出。

层次遍历需要借助队列实现,将根结点加入队列中,然后依次出队遍历队列中的结点,将其非空子节点加入队列中。

public void bfsTraversal(TreeNode root){
    if (root == null){
        return;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()){
        int size = queue.size();
        for (int i = 0; i < size; i++) {
            TreeNode node = queue.poll();
            System.out.print(node.val+" ");
            if(node.left != null){
                queue.offer(node.left);
            }
            if(node.right != null){
                queue.offer(node.right);
            }
        }
    }
}

示例说明

示例1

我们先创建一颗二叉树:

      1
     / \
    2   3
   / \   \
  4   5   6

我们可以先通过对应的代码创建这棵树:

TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.right = new TreeNode(6);

然后我们可以通过先序遍历方法遍历这棵树,并输出结果:

preorderTraversal(root); // 1 2 4 5 3 6

同样地,我们可以通过其他三个遍历方式来遍历这棵树,并输出结果。

示例2

我们再创建一棵二叉树:

        5
       / \
      4   7
     /   / \
    2   6   8

同理,我们可以先通过对应的代码来创建这棵树:

TreeNode root = new TreeNode(5);
root.left = new TreeNode(4);
root.right = new TreeNode(7);
root.left.left = new TreeNode(2);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(8);

然后我们可以通过层次遍历方法遍历这棵树,并输出结果:

bfsTraversal(root); // 5 4 7 2 6 8

同样地,我们也可以通过其他三个遍历方式来遍历这棵树,并输出结果。

总的来说,Java二叉树的四种遍历方式都是通过递归来实现的,代码实现也比较简单。但我们要注意不同遍历方式的顺序,并了解对应的遍历顺序特点,才能适当地应用到实际工作当中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java二叉树的四种遍历方式详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Spring Security单项目权限设计过程解析

    Spring Security 单项目权限设计过程解析 在一个Web应用中,权限管理一般是必不可少的功能。Spring Security 提供了强大的组件和方法,使得我们可以轻松地在应用中添加认证和授权的功能。针对单个应用的权限管理,一般需要经过以下步骤: 步骤一:添加依赖 在项目的 pom.xml 文件中,我们需要添加以下依赖: <dependenc…

    Java 2023年5月20日
    00
  • SpringBoot整合SpringDataRedis的示例代码

    针对SpringBoot整合SpringDataRedis的示例代码,我来进行详细讲解。以下是完整攻略: 1. 引入依赖 在 pom.xml 文件中引入 Spring Data Redis 的依赖: <dependency> <groupId>org.springframework.boot</groupId> <a…

    Java 2023年5月20日
    00
  • MyBatis实现模糊查询的几种方式

    下面是关于 MyBatis 实现模糊查询的几种方式的攻略。 使用 LIKE 关键字查询 在 SQL 语句中,LIKE 关键字可以匹配模糊字符串。我们可以使用它来进行模糊查询。MyBatis 框架也提供了对 LIKE 关键字的支持,具体代码如下: <select id="queryByKeyword" parameterType=&q…

    Java 2023年5月20日
    00
  • 带你入门java雪花算法原理

    带你入门java雪花算法原理 概述 雪花算法(Snowflake)是 Twitter 开源的分布式 id 生成算法,以其独特的 id 生成方式,广泛用于分布式系统中唯一 id 的生成,保证了分布式系统中数据的唯一性。 原理 雪花算法生成的 id 是一个 64 位的 long 型整数,其中: 1 bit:表示不可用,Java long 类型的高位是符号位,正数…

    Java 2023年5月19日
    00
  • spring boot 默认异常处理的实现

    Spring Boot 默认的异常处理机制可以根据不同的异常类型,自动返回对应的 HTTP 状态码,同时输出异常信息,帮助我们快速定位错误。 默认情况下,无需显式配置,Spring Boot 就可以捕获控制器方法抛出的异常及一些框架内部异常。当异常被捕获后,Spring Boot 会根据异常类型来自动选择以下处理步骤: 如果是 HTTP 400 错误,返回 …

    Java 2023年5月27日
    00
  • 学习 WSH 的理由小结

    学习 WSH(Windows Script Host)的理由有很多,我在这里总结了一些重要的理由,帮助大家更好地了解 WSH 并开始学习。 学习 WSH 的理由小结 1. WSH 是 Windows 操作系统自带的脚本处理引擎 WSH 是和 Windows 操作系统一起安装的,它提供了一种可以运行脚本程序的环境,使得我们可以使用脚本语言来处理各种操作系统的任…

    Java 2023年5月26日
    00
  • Java中List集合的深入介绍(超级推荐!)

    Java中List集合的深入介绍 1. List集合简介 List是Java集合框架中最基本,且使用频率最高的一种集合。List是有序的集合,元素可以重复,并且可以根据索引位置进行访问、添加、删除等操作。 List 是一个接口,常用的实现类包括 ArrayList, LinkedList, Vector。 2. 操作List集合的常用方法 2.1 添加元素 …

    Java 2023年5月26日
    00
  • springboot(thymeleaf)中th:field和th:value的区别及说明

    在 SpringBoot 中使用 Thymeleaf 模版引擎时,常会使用 th:field 和 th:value,这两个指令都用于绑定表单数据和模型数据。 th:value 指令 th:value 指令用于将表单元素的 value 值设置为指定的表达式的值。 示例: <form> <input type="text" …

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部