二叉树的层序遍历-广度优先遍历

news2024/12/23 18:52:34

正常来讲二叉树的层序遍历 我们 使用递归 ,来进行 就可以得到正确答案,但是有时候递归比较难以理解,我们今天用队列的形式 来进行二叉树的层序遍历   

我们使用队列对二叉树进行层序遍历的核心思想有两个

1. 我们用队列 记录二叉树每一层的元素 

比如 现在有一个空队列   【】

一个二叉树的 结构如下

1.我们首先把根节点添加到 队列中去   【 1】

2.然后 我们判断 队列是否为空,来进入循环,根节点不为空 进入循环 ,

3.我们把他的左孩子 加入到队列,右孩子 加入到队列  现在队列 元素是 【1,2,3】

4.然后 我们把根节点出队打印,现在头节点变成2,队列元素为【2,3】

5.然后 我们再把头节点左右孩子加入队列 【2,3,4,5】然后头节点出队变成【3,4,5】,然后再把头节点左右孩子加入队列【3,4,5,6,7】然后头节点出队打印,依次循环,直到队列为空

下面来看一下代码实现

node节点

package tree;

public class TreeNode {
    public  int val;
    public TreeNode left;
    public  TreeNode right;
    public  TreeNode(TreeNode left,int val,TreeNode right){
        this.left=left;
        this.val=val;
        this.right=right;
    }
}
  TreeNode node = new TreeNode(new TreeNode(new TreeNode(null,4,null),2,new TreeNode(null,5,null))
                ,1,
                new TreeNode(new TreeNode(null,6,null),3,new TreeNode(null,7,null)));
        ArrayDeque<TreeNode> queue=new ArrayDeque<>();
        queue.add(node);
while (!queue.isEmpty()){
    TreeNode treeNode = queue.poll();
    System.out.print(treeNode.val);
    if(treeNode.left!=null){
        queue.add(treeNode.left);
    }
    if(treeNode.right!=null){
        queue.add(treeNode.right);
    }

}

但是呢这样得出来的结果是这样的

不够优雅,我们如何打印出一个树型结构的层序遍历呢?

首先我们分析  一个二叉树 如上图我画的那个二叉树,第一层 一个元素,第二层 两个元素,第三层是四个元素 ,我们可以打印出 每一层的元素之后,让该元素换行,就可以得到树形结构的二叉树,

但是我们怎么知道每一层的元素个数呢?我们可以引入一个临时变量,来记录我们每一层的元素个数,然后根据我们每一层添加的元素个数,来进行遍历打印

就比如  我们 第一层添加了一个根节点,那么我们就循环打印一次元素,然后记录下添加元素的个数,我们添加元素的个数也就是下一层循环应该遍历的次数

  //广度优先遍历
        TreeNode node = new TreeNode(new TreeNode(new TreeNode(null,4,null),2,new TreeNode(null,5,null))
                ,1,
                new TreeNode(new TreeNode(null,6,null),3,new TreeNode(null,7,null)));
        ArrayDeque<TreeNode> queue=new ArrayDeque<>();
        queue.add(node);
        int count=1;//表示现在队列中的元素 也就是二叉树的层数中的元素  也是for循环循环的次数
        while (!queue.isEmpty()){
            int count1=0;//记录循环中添加了几次元素  添加几次元素  就是 该二叉树层数 的元素个数
            // 比如 第一层的节点 是1  左右两个孩子
            for (int i = 0; i < count; i++) {
                TreeNode node1 = queue.poll();
                System.out.print(node1.val);

                if (node1.left != null) {
                    queue.add(node1.left);
                    count1++;
                }
                if (node1.right != null) {
                    queue.add(node1.right);
                    count1++;
                }
            }
            System.out.println();
        count=count1;
        }

得出来是这样的

就显示的比较优雅,如果想要更优雅,还可以自行加判断

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

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

相关文章

240908-结合DBGPT与Ollama实现RAG本地知识检索增强

A. 最终效果 B. 背景说明 DBGPT在0.5.6版本中开始支持Ollama&#xff1a;v0.5.6 版本更新 网友对其Web端及界面端的设置进行了分享&#xff1a; feat(model): support ollama as an optional llm & embedding proxy by GITHUBear Pull Request #1475 eosphoros-ai/DB-G…

【新手必看】Windows 上安装 Minio及简单使用

一&#xff0c;minio是什么&#xff1f; MinIO 是一个高性能、分布式的对象存储系统&#xff0c;专门用于存储大量非结构化数据&#xff0c;例如图片、视频、日志文件、备份等&#xff0c;且一个对象文件可以是任意大小&#xff0c;从几kb到最大5T不等。Minio是一个非常轻量的服…

【数学建模】2024年国赛成绩公布时间预测

经过三天三夜的奋战&#xff0c;2024年数学建模国赛也宣告结束&#xff0c;相信这几天超高强度的比赛也让大家精疲力竭了&#xff0c;所以经过几天的调整&#xff0c;大家都恢复过来了吧。能够在高强度的压力下坚持这么久&#xff0c;大家都超级厉害的&#xff01; 当然完整提交…

如何更好地解释你的想法并说服他人

这篇内容讨论了如何更有效地解释你的思想和想法&#xff0c;并说服他人。提出了几个原则和策略&#xff0c;如意想不到、简单性、具体化、故事性和情感。 中文 1 我最近读了一本关于有效沟通的书&#xff0c;名为《让你的想法更具说服力》&#xff08;《创意黏力学》&#x…

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】

此系列是本人阅读论文过程中的简单笔记&#xff0c;比较随意且具有严重的偏向性&#xff08;偏向自己研究方向和感兴趣的&#xff09;&#xff0c;随缘分享&#xff0c;共同进步~ Integrated Sensing and Communications: Toward Dual-Functional Wireless Networks for 6G and…

让人物照片跳舞vigen追影

本质上是一种视频换脸技术的升级版&#xff0c;视频换身。 项目体验地址&#xff1a;》》》魔搭社区《《《 选择“创作视频” 1.上传一张全身照片 2.选择一个包含动作的视频 3.点击“开始生成” 看效果 dreamoving-v1-2024-09-08-1000017-888139-result 动作的表现力还是很惊…

通过Docker实现openGauss的快速容器化安装

容器安装 本章节主要介绍通过 Docker 安装 openGauss&#xff0c;方便 DevOps 用户的安装、配置和环境设置。 支持的架构和操作系统版本 x86-64 CentOS 7.6 ARM64 openEuler 20.03 LTS 配置准备 使用 buildDockerImage.sh 脚本构建 docker 镜像&#xff0c;buildDockerIm…

【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)

2024年计算机与信息安全国际会议 (WCCIS 2024) 将于2024年9月27-29日召开。 会议旨在为从事计算机与信息安全的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路&#xff0c;加强学术研究和探讨&…

动态规划(算法)---02.斐波那契数列模型_三步问题

题目链接&#xff1a; 面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/three-steps-problem-lcci/description/ 一、题目解析 题目&#xff1a; 题目讲解&#xff1a; 我们先举例查看规律&#xff1a; 第一台阶&#xff1a;我…

鸿蒙OS 概述

鸿蒙OS 系统定义 HarmonyOS 是一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统。在传统的单设备系统能力的基础上&#xff0c;HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c…

《食品界》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《食品界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《食品界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中国商业联合会 主办单位&#x…

【Hot100】LeetCode—62. 不同路径

目录 1- 思路题目识别动规五部曲 2- 实现⭐62. 不同路径——题解思路 3- ACM 实现 原题链接&#xff1a;62. 不同路径 1- 思路 题目识别 识别1 &#xff1a;给一个二维矩阵&#xff0c;每次只能向下或者向右移动一步识别2&#xff1a;求解到达最右下角的路径数。 动规五部曲…

Ubuntu WSL使用技巧

0 Preface/Foreword 1 默认为root用户 当下载完成Ubuntu之后&#xff0c;首次登录&#xff0c;当完成初始化后&#xff0c;提示输入新的用户名时候&#xff0c;直接点击右上角的X按钮&#xff0c;再重新登陆&#xff0c;系统会默认使用root权限登录。 2 root用户和普通用户切换…

力科示波器桌面分析远程控制软件

软件在这里下载&#xff1a;Teledyne LeCroy - MAUI Studio - Remote and Offline PC Analysis Software for an Oscilloscope 我去年因为要分析示波器波形&#xff0c;下载过它的MAUI Studio。它的免费版需要逐年注册。注册是免费的。示波器从业人员和工程技术人员可以看看示…

基于微信小程序的鲜花销售系统设计与实现毕业设计-附源码

鲜花销售系统|鲜花销售系统源码|鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现 鲜花销售系统源码&#xff1a;鲜花销售微信小程序具有鲜花销售信息管理功能的选择&#xff0c;鲜花销售微信小程序采用java技术&#xff0c;基于mysql开发&#xff0c;实现了首页、个人…

企业常用的源代码加密软件有哪些?10款源代码加密软件推荐

在现代企业中&#xff0c;源代码保护变得尤为重要&#xff0c;因为源代码不仅是软件的核心资产&#xff0c;还可能包含商业秘密和知识产权。因此&#xff0c;许多企业都在寻找合适的源代码加密软件来保护其代码的安全性。本文将为您介绍10款常用的源代码加密软件&#xff0c;帮…

4款工具搞定固态硬盘数据恢复!一起来看看!

数据丢失&#xff0c;这可能是每个电脑用户都曾遇到过的噩梦。今天&#xff0c;我就来聊聊我亲身体验过的四款数据恢复软件&#xff0c;看看它们在帮我从硬盘的“深渊”中捞回宝贵数据时的表现如何呢&#xff1f;一起来看看吧&#xff01; 一、福昕数据恢复 网址&#xff1a;h…

油电叉车倒车防撞报警系统精准探测

油电叉车倒车防撞报警系统通过集成最新的传感器技术、图像识别算法以及智能控制技术‌&#xff0c;通过实时监测叉车周围环境中的障碍物、行人和其他叉车&#xff0c;及时发出警报&#xff0c;避免可能的碰撞事故。 油电叉车倒车防撞报警系统功能详解 精准探测 叉车倒车时&a…

怎么仿同款小程序的开发制作方法介绍

很多老板想要仿小程序系统&#xff0c;就是想要做个和别人界面功能类似的同款小程序系统&#xff0c;咨询瀚林问该怎么开发制作&#xff1f;本次瀚林就为大家介绍一下仿制同款小程序系统的方法。 1、确认功能需求 想要模仿同款小程序系统&#xff0c;那么首先需要找到自己想要…