【java实现二叉树的各种遍历方式】

2023-11-15

二叉树的各种遍历方式

通过递归方式,可实现二叉树的层级遍历,先序,中序,后序等遍历方式。

package com.ykq;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: ykq
 * @date: 2023/3/17 14:33
 * @Description:
 */
public class ListNodeTest {

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

    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        TreeNode node8 = new TreeNode(8);
        TreeNode node9 = new TreeNode(9);
        TreeNode node10 = new TreeNode(10);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node2.right = node5;
        node3.left = node6;
        node3.right = node7;
        node6.right = node8;
        node7.left = node9;
        node4.right = node10;
        System.out.print("层序遍历:");
        hierarchicalTraversal(node1);
        System.out.println();
        System.out.print("前序遍历:");
        preOrderTraversal(node1);
        System.out.println();
        System.out.print("中序遍历:");
        inOrderTraversal(node1);
        System.out.println();
        System.out.print("后序遍历:");
        postOrderTraversal(node1);
        System.out.println();
        System.out.print("根右左遍历:");
        rootRightLeft(node1);
        System.out.println();
        System.out.print("右根左遍历:");
        rightRootLeft(node1);
        System.out.println();
        System.out.print("右左根遍历:");
        rightLeftRoot(node1);
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:56
     * @Description 层级遍历
     */
    public static void hierarchicalTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        List<TreeNode> nodeList = new ArrayList<>();
        nodeList.add(root);
        hierarchicalTraversal(nodeList);
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 15:07
     * @Description 递归层序遍历
     */
    public static void hierarchicalTraversal(List<TreeNode> nodeList) {
        List<TreeNode> treeNodeList = new ArrayList<>();
        for (TreeNode treeNode : nodeList) {
            System.out.print(treeNode.val + " ");
            if (treeNode.left != null) {
                treeNodeList.add(treeNode.left);
            }
            if (treeNode.right != null) {
                treeNodeList.add(treeNode.right);
            }
        }
        if (treeNodeList.size() > 0) {
            hierarchicalTraversal(treeNodeList);
        }
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:38
     * @Description 前序遍历->根左右
     */
    public static void preOrderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        System.out.print(root.val + " ");
        preOrderTraversal(root.left);
        preOrderTraversal(root.right);
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:42
     * @Description 中序遍历->左根右
     */
    public static void inOrderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        inOrderTraversal(root.left);
        System.out.print(root.val + " ");
        inOrderTraversal(root.right);
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:44
     * @Description 后序遍历->左右根
     */
    public static void postOrderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        postOrderTraversal(root.left);
        postOrderTraversal(root.right);
        System.out.print(root.val + " ");
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:49
     * @Description 根右左
     */
    public static void rootRightLeft(TreeNode root) {
        if (root == null) {
            return;
        }
        System.out.print(root.val + " ");
        rootRightLeft(root.right);
        rootRightLeft(root.left);
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:51
     * @Description 右根左
     */
    public static void rightRootLeft(TreeNode root) {
        if (root == null) {
            return;
        }
        rightRootLeft(root.right);
        System.out.print(root.val + " ");
        rightRootLeft(root.left);
    }

    /**
     * @Author ykq
     * @Date 2023/3/17 14:52
     * @Description 右左根
     */
    public static void rightLeftRoot(TreeNode root) {
        if (root == null) {
            return;
        }
        rightLeftRoot(root.right);
        rightLeftRoot(root.left);
        System.out.print(root.val + " ");
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【java实现二叉树的各种遍历方式】 的相关文章

随机推荐

  • 解决电脑能够登录QQ,但是不能打开网页的问题

    电脑更新Win11之后每次重新开机都会出现能够登录QQ 但是打开不了网页的问题 解决办法分为三种 方法一 让你的电脑管家帮你 最省事的办法 打开你的安全卫士之类的软件 这里我用的是联想自带的联想电脑管家 首先点右上角的小箱子图标 然后在新的
  • Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收

    http www cnblogs com likehua p 4023667 html
  • 概述计算机网络五层原理体系结构中各层的功能_请收好这一份详细清晰的计算机网络基础学习指南...

    点击上方 Java后端 选择 设为星标 优质文章 及时送达 来源 简书 作者 Carson Ho 链接 jianshu com p 45d27f3e1196 前言 计算机网络基础是研发 运维工程师都需掌握的知识 但往往会被忽略 今天 我将献
  • 【无标题】苹果手机连接罗技鼠标和蓝牙键盘的设置方法

    苹果手机连接罗技鼠标和蓝牙键盘的设置方法如下 iPhone手机打开鼠标设置的路径 设置 辅助功能 触控 辅助触控 打开 请按以下步骤操作 第一步 第二步 第三步 第四步 到这一步以后 屏幕上会出现一个半透明小圆球 同时也可以蓝牙连接鼠标 连
  • 复习之web服务器--apache

    PS Vim复制小技巧 一 实验环境 两台虚拟机 nodea nodeb 配置ip 搭建软件仓库 关闭selinux root ftp Desktop hostnamectl set hostname nodea westos org ro
  • 多文件上传关于input type=file元素

    我们都知道 html5中有个input type file元素 用该元素可以实现页面上传文件的功能 但一般的做法只是简单的在表单中操作 我来研究一下深层东西 想要了解它 就要知道它的内置对象 files 页面上写一个input 然后选俩个图
  • 【Pytorch with fastai】第 16 章 :训练过程

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • linux-网站服务

    一 概念 1 框架结构 LAMP linux apache mysql PHP 系统 服务器程序 数据管理软件 中间软件 二 静态站点 1 安装Apache 1 root localhost yum y install httpd 安装 r
  • CF Round 481 (Div. 3)--D. Almost Arithmetic Progression(思维)

    Polycarp likes arithmetic progressions A sequence a1 a2 an is called an arithmetic progression if for each i 1 i
  • opencv中的merge函数

    文中例子已修改正确 具体原因见评论区 该函数用来合并通道 原型 版本一 void merge const Mat mv size t count OutputArray dst 第一个参数是图像矩阵数组 第二个参数是需要合并矩阵的个数 第三
  • 置信区间计算方法

    文章目录 1 均值的置信区间 2标准差的置信区间 3偏度的置信区间 4 变异系数的置信区间 5参考文献 画图加个阴影 需要用到置信区间的计算方法 SPSS和R应该都能算 这里简单罗列下三阶统计的计算方法 1 均值的置信区间 以前保存的一个表
  • [技术发展-12]:高级研修班-智能汽车-新能源汽车动力系统关键技术

    作者主页 https blog csdn net HiWangWenBing 文章出处 https blog csdn net HiWangWenBing article details 118196111 锂电池和磷酸铁锂电池各有千秋 磷
  • 解析WINDOWS中的DLL文件---经典DLL解读

    在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 现在就走进这些神奇的活动大陆 找出它们隐藏已久的秘密吧 初窥门径 Windows的基石 随便打开一个系统目录 一眼望去就能看到很多扩展名DLL的文件 这些就是经
  • 基金股票投资调研

    1 本金不多 是买股票还是买基金 十万以上的话 可以买股票 十万以下 买基金 好股票股价都很贵 买一手一两万太正常 你不到十万块 买不了几手 做到行业分散很难 股票需要资金量 而基金往往一块钱就能买 2 可转债与股票 股票 1手 即是100
  • FbxSDK官网文档阅读总结

    FbxSDK官网文档地址 传送门 原文 Normally an FBX application needs only one SDK manager object Most FBX applications need only one sc
  • mysql ---- 全文索引:中文语义分词检索

    转 https www cnblogs com huanzi qch p 15238604 html 介绍 通常情况下 全文检索引擎我们一般会用ES组件 传送门 SpringBoot系列 ElasticSearch 但不是所有业务都有那么大
  • OpenCV Gabor滤波器实现纹理提取与缺陷分析

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 一 Gabor滤波器介绍 Gabor滤波器是OpenCV中非常强大一种滤波器 广泛应用在纹理分割 对象检测 图像分维 文档分析 边缘检测 生物特征识别 图像编码与内容描述
  • C语言中的“三体”大佬们知道是什么吗? —— 结构体、枚举、联合体

    目录 前言 结构体 基本概念 结构体类型的声明 结构的声明 特殊的声明 结构的自引用 结构体变量的定义和初始化 结构体的对齐规则 为什么要内存对齐 修改默认对齐数 修改默认对齐数的预处理命令 实际例子 结构体传参 结构体实现位段 位段的填充
  • 渗透技巧——手动判断注入点(思维导图)

    在渗透测试过程中 在web存在较复杂的情况下需要有针对性的先进性手动测试是否存在注入点 总结如下手动测试思维导图 如下思维导图针对大多数有注入点的场景
  • 【java实现二叉树的各种遍历方式】

    二叉树的各种遍历方式 通过递归方式 可实现二叉树的层级遍历 先序 中序 后序等遍历方式 package com ykq import java util ArrayList import java util List author ykq