二叉树的四种遍历方式(二)

news2024/9/28 15:29:31

接上文《二叉树的四种遍历方式(一)》(https://blog.csdn.net/helloworldchina/article/details/128895188),在本文讲述一下第四种遍历方式,即按层次遍历二叉树。

一 讲解

1 先序遍历二叉树, 见《二叉树的四种遍历方式(一)》(https://blog.csdn.net/helloworldchina/article/details/128895188)
2 中序遍历二叉树, 同上;
3 后序遍历二叉树, 同上;
4 层次遍历二叉树, 见下:

按层次遍历二叉树的定义是:
从根开始,按层次的递增顺序和每层从左到右的顺序进行遍历。对于上文中的二叉树,若按层次从左到右进行遍历,则有以下序列:ABFCEGDHI.

要实现按层次遍历,需要使用一个队列来存放要访问的节点,并将节点的值存入新的队列,遍历按照以下方式进行:
1) 先访问根节点,将根节点的值插入新队列;
2) 重复执行以下操作:从队列中取出头节点,依次访问该节点的左孩子、右孩子,直至队列为空;且每个节点访问后,就将该节点的值插入新队列。

二 代码

见方法levelTraveral,其它代码可参见《二叉树的四种遍历方式(一)》(https://blog.csdn.net/helloworldchina/article/details/128895188):


    /**
     * 按照层次遍历二叉树,使用队列(先进先出)实现。
     */
    public void levelTraveral(Node node){
        System.out.print("按照层次遍历二叉树,使用队列实现:");
        System.out.println();
        //节点个数
        int num=0;
        if  (node==null){
            return;
        }
        //1、创建二叉树节点队列
        Queue<Node> queue = new LinkedList<>();
        //2 创建一个存储二叉树中值的队列
        Queue<Object> queueData = new LinkedList<>();
        //3、二叉树节点入队
        queue.add(node);
        //4 二叉树节点值入队
        queueData.add(node.value);
        //队列中有元素则进入循环
        if (queue.size()!=0) {
            num++;
        };
        while (queue.size()!=0){

            //按照栈中元素的个数进行出队循环
            int len = queue.size();
            for(int i = 0;i<len;i++){
                //根节点出队
                Node temp = queue.poll();
                System.out.print(temp.value+" ");
                //如果根节点有左子节点,左子节点入队
                if (temp.leftNode!=null) {
                    queue.add(temp.leftNode);
                    queueData.add(temp.value);
                    num++;

                }
                //如果根节点有左子节点,左子节点入队
                if (temp.rightNode!=null) {
                    queue.add(temp.rightNode);
                    queueData.add(temp.value);
                    num++;

                }
            }
        }
        System.out.println();
        System.out.println("queueData size="+queueData.size());
        System.out.println("num="+num);
    }

package cytdemo;

/**
 * 二叉树遍历测试
 * @author Gyl
 * @date 2023/2/5
 */
public class TestBinaryTree {

    public static void main(String[] args) {
        //手动创建节点
        Node node9 = new Node("I",null,null);
        Node node8 = new Node("H",null,null);
        Node node7 = new Node("G",node8,node9);
        Node node6 = new Node("F",null,node7);
        Node node5 = new Node("D",null,null);
        Node node4 = new Node("E",null,null);
        Node node3 = new Node("C",null,node5);
        Node node2 = new Node("B",node3,node4);
        Node node1 = new Node("A",node2,node6);

        //通过根节点创建一个二叉树对象
        BinaryTree bTree=new BinaryTree(node1);
        //判断是否为空
        System.out.println("是否为空:"+bTree.isEmpty());

        //层次遍历,递归实现
        System.out.println();
        System.out.println("输出层次遍历:");

        bTree.levelTraveral(node1);


    }


三 展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于知名金融公…

nodejs+vue地铁站自动售票系统-火车票售票系统vscode

地铁站自动售票系统主要包括个人中心、地铁线路管理、站点管理、购票信息管理、乘坐管理、用户信息管理等多个模块。它使用的是前端技术&#xff1a;nodejsvueelementui 前后端通讯一般都是采取标准的JSON格式来交互。前端技术&#xff1a;nodejsvueelementui,视图层其实质就是…

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…

pip离线安装windows版torch

文章目录前言conda创建虚拟环境安装torchtorch官网在线安装离线手动安装测试是否安装成功后记前言 学习的时候遇到几个机器学习相关的项目&#xff0c;由于不同的项目之间用到的依赖库不太一样&#xff0c;于是想利用conda为不同的项目创建不同的环境方便管理和运行&#xff0…

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

删除特征: data data.drop([region, sex], axis1)特征数据调整: data.apply( ) # 体重指数&#xff0c;离散化转换&#xff0c;体重两种情况&#xff1a;标准、肥胖 def convert(df,bmi):df[bmi] fat if df[bmi] > bmi else standardreturn df data data.apply(convert, …

Hadoop技术浅析

一、什么是HadoopHadoop是一个适合大数据存储和计算的分布式框架Hadoop广义狭义之分狭义上Hadoop指Hadoop框架广义上随着大数据技术的发展&#xff0c;Hadoop也发展成了一个生态圈&#xff0c;包含&#xff1a;Sqoop&#xff1a;Sqoop是一款开源的工具&#xff0c;主要用于在Ha…

洛谷2月普及组(月赛)

&#x1f33c;小宇&#xff08;治愈版&#xff09; - 刘大拿 - 单曲 - 网易云音乐 OI赛制且难度对标蓝桥杯省赛&#xff08;&#x1f625;真难&#xff0c;第三题做了几百年&#xff0c;第四题只敢骗骗分&#xff09; 花了10块钱&#x1f643; 买官网的思路&#xff0c;结果…

linux004之 vi和vim编辑器

vi、vim编辑器简介&#xff1a; 是linux中的文本编辑器&#xff0c;用来在linux系统中查看或编辑文本文件的命令&#xff0c; 相当于windows文本编辑器。 vi和vim的区别&#xff0c; vim是增强版&#xff0c; 功能相比vi是增强了。功能都查不多&#xff0c;用哪个都行&#xff…

数据库高并发和高可用方案

依旧主要参考沈剑大佬的多篇博文&#xff0c;以及数位网友的优秀分享&#xff0c;文末是完整参考。 1、高可用方案(HA&#xff0c;High Availability) 缓存是通过双写和双读主备、或者利用缓存的集群数据同步&#xff0c;故障自动转移来实现的 数据库的读是通过读写分离(MHA&am…

06-PS中的四种蒙版

Photoshop中的蒙版就是遮罩的意思&#xff0c;主要作用就是将其所在的图层&#xff0c;把不同的明暗度转化成相应的透明度。黑色为完全透明&#xff0c;灰色为半透明&#xff0c;白色为完全不透明。添加蒙版有便于灵活修改&#xff0c;不影响图层原貌。PS蒙版有四类&#xff1a…

【状态估计】基于二进制粒子群优化 (BPSO) 求解最佳 PMU优化配置研究【IEEE30、39、57、118节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Mybatis与微服务注册

目录 一&#xff0c;Springboot整合MybatisPlus 创建商品微服务子模块 二&#xff0c;SpringBoot整合Freeamarker 三、SpringBoot整合微服务 &gateway&nginx 整合微服务之商品服务zmall-product 创建并配置网关gateway服务 安装配置SwitchHosts 安装配置Windo…

【大数据hive】hive 函数使用详解

一、前言 在任何一种编程语言中&#xff0c;函数可以说是必不可少的&#xff0c;像mysql、oracle中&#xff0c;提供了很多内置函数&#xff0c;或者通过自定义函数的方式进行定制化使用&#xff0c;而hive作为一门数据分析软件&#xff0c;随着版本的不断更新迭代&#xff0c…

代码随想录第58天(动态规划):● 392.判断子序列 ● 115.不同的子序列

一、判断子序列 题目描述&#xff1a; 思路和想法&#xff1a; 这道题目还是最长公共子序列的拓展&#xff0c;只是这里进行删除的一定是t字符串&#xff0c;当不相等时&#xff0c;dp[i][j] dp[i][j - 1]&#xff1b;其余基本一致。当最长公共子序列个数等s.size()时&#x…

Leetcode力扣秋招刷题路-0050

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 50. Pow(x, n) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&am…

N字形变换-力扣6-java

一、题目描述将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a;P A H NA P L S I I GY I R之后&#xff0c;你的输出需要从左往右逐行读…

大神之路-起始篇 | 第11章.计算机科学导论之【数据压缩】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 &#x1f447; 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01;涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折&#xff0c;莫待无花空折…

【深度学习】卷积神经网络

1 卷积神经网络&#xff08;CNN&#xff09;可以做什么&#xff1f; 检测任务分类与检索超分辨率重构&#xff1a;将图像训练的更清晰医学任务等无人驾驶人脸识别 2 用GPU&#xff1a;图像处理单元 比CPU块一百倍以上 3 卷积神经网络与传统神经网络的区别 传统神经网络&…

从证券软件开发到大数据开发,薪资涨幅一倍多,我经历了什么?

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群分享学习群一位同学的大数据转型经历&#xff0c;他17年毕业后培训了几个月去了杭州一家证券公司做外包&#xff0c;用的是古老的…

有限元分析学习一

系列文章目录 有限元分析学习一 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、有限元方法的简单介绍1.1 有限元的基础概念1.2 有限元软件发展历史1.3 有限元软件二、弹性力学的简单介绍2.1.…