Leetcode每日刷题之102.二叉树的层序遍历

news2024/11/15 17:41:45

1.题目解析

本题是关于二叉树的层序遍历,不过这里的难点是如何将每一层的数据存储在数组并将整体存储在一个二维数组中,具体的算法原理我们在下面给出

 

2.算法原理

关于将每层数据分别存储在不同数组中,我们可以定义一个levelSize变量来存储栈内数据个数,然后限制对vector容器中的插入次数,来达到每个vector容器都只保留每一层的数据即可,并且关于每一层数据的逐层入栈,我们可以在每一个根节点出栈时将该节点的左右子结点入栈,用来达到逐层入栈的效果,并且此时栈内数据就是每一层的数据个数,我们可以用这个数据的个数来限制插入次数

3.代码展示

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) 
    {
         //创建一个二维数组来存储每一层的信息
        vector<vector<int>> vv;
        //创建一个队列用来取出每一层数据
        queue<TreeNode*> q;
        int levelSize = 0;//控制层数

        //对根节点特殊处理
        if(root)
        {
            q.push(root);
            levelSize = 1;
        }

        while(!q.empty())
        {
            vector<int> v;
            while(levelSize--)
            {
                //进入该层树节点
                TreeNode* front = q.front();
                q.pop();
                v.push_back(front->val);

                //进入下一层树节点
                if(front->left)
                {
                    q.push(front->left);
                }

                if(front->right)
                {
                    q.push(front->right);
                }
            }
            //二维数组中存储每一层的数据
            vv.push_back(v);
            //此时栈内数据个数就是本层所有数据,直接取出即可
            //需要使用levelSize来保证完全取出
            levelSize = q.size();
        }
        return vv;
    }
};

 

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

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

相关文章

网络编程(TCP+网络模型)

【1】TCP 初版服务器 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h…

【学习笔记】SSL/TLS如何运用加密工具

一、前文回顾&#xff1a; 1、SSL/TLS有3个目的&#xff0c;分别由不同密码学工具提供 Confidentiality&#xff08;保密性&#xff09;&#xff1a;数据只有Client和Server才能访问&#xff0c;由Encryption&#xff08;加密&#xff09;所提供Integrity&#xff08;完整性&…

【话题讨论】VS Code:倍增编程动力,实现效率飞跃

目录 引言 一、详情介绍 功能特点 使用场景 提高工作效率 二、效率对比 2.1 高度可定制性与丰富的插件生态 2.2 智能的代码补全与导航 2.3 内置的调试器与版本控制集成 2.4 轻量级与跨平台 2.5 选择合适工具的重要性 2.6 实际案例或数据展示 三、未来趋势 3.1 编…

iOS——Block与内存管理

需要内存管理的情况 1、对象类型的auto变量。 2、引用了 __block 修饰符的变量。 三种block类型 全局类型 &#xff08;NSGlobalBlock&#xff09; 如果一个block里面没有访问普通局部变量(也就是说block里面没有访问任何外部变量或者访问的是静态局部变量或者访问的是全局…

FPGA开发:可编程逻辑器件概述

PLD 1、什么是PLD&#xff1f; PLD指Programmable Logic Device&#xff0c;翻译为"可编程逻辑器件"。是20世纪70年代发展起来的一种新的集成电路&#xff0c;是一种半定制的集成电路。 PLD具有逻辑功能实现灵活。集成度高、处理速度快的特点。 PLD就像是一个可定…

【Vue】pnpm创建Vue3+Vite项目

初始化项目 &#xff08;1&#xff09;cmd切换到指定工作目录&#xff0c;运行pnpm create vue命令&#xff0c;输入项目名称后按需安装组件 &#xff08;2&#xff09;使用vs code打开所创建的项目目录&#xff0c;Ctrl~快捷键打开终端&#xff0c;输入pnpm install下载项目…

IDEA运行Java程序提示“java: 警告: 源发行版 11 需要目标发行版 11”

遇到这个提示一般是在pom.xml中已经指定了构建的Java版本环境是11例如(此时添加了build插件的情况下虽然不能直接运行代码但是maven是可以正常打包构建)&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><…

Vue初学-简易计算器

最近在学习Vue的指令&#xff0c;做了一个简易计算器&#xff0c;比较适合刚入门的人参考学习。用到的知识点有&#xff1a; 1.插值表达式 2.v-model&#xff0c;双向绑定、-、*、/、**等操作符 3.v-show&#xff0c;控制操作数2是否显示&#xff0c;乘方时不显示操作数2 4.met…

‌软媒市场—‌软媒市场自助发布平台引领数字营销新风尚

在当今这个信息爆炸的时代,数字营销已经成为企业推广品牌、提升知名度的关键手段。而在众多数字营销工具中,‌软媒市场自助发布平台以其独特的优势脱颖而出,成为众多企业的首选。今天,我们就来深入探讨一下软文媒体自助发布平台如何在软媒市场中发挥重要作用,以及其背后的5万家…

FRP代理(TCP通信)实验

攻击机器---公网机器&#xff08;FRP服务端&#xff09;-TCP传输rdp内容--内网机器&#xff08;FRP客户端&#xff09;--内网本地&#xff08;RDP服务&#xff09; FRP版本&#xff1a;0.49.0 公网IP&#xff08;FRP服务端&#xff09;&#xff1a;192.168.254.131 内网&…

Mindspore 初学教程 - 4. 数据集 Dataset

数据是深度学习的基础&#xff0c;MindSpore 提供基于 Pipeline 的 数据引擎&#xff0c;通过数据集 数据集&#xff08;Dataset&#xff09; 和 数据变换&#xff08;Transforms&#xff09; 实现高效的数据预处理。其中 Dataset 是 Pipeline 的起始&#xff0c;用于加载原始数…

# centos7 安装 mysql

centos7安装mysql 1、添加 mysql 官方 yum 存储库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpmrpm -ivh mysql80-community-release-el7-3.noarch.rpm2、使用Yum安装MySQL服务器&#xff1a; sudo yum install mysql-server3、启动MySQL服务…

Redis集群技术2——redis基础

Redis安装 Redis 的安装相对简单&#xff0c;无论是 Windows、Linux 还是 macOS 系统&#xff0c;都有相应的安装方法。以下是针对不同操作系统的 Redis 安装简述。 1. Linux 系统安装 Redis 在 Linux 系统中安装 Redis 通常有多种方式&#xff0c;这里以 Ubuntu 和 CentOS 为…

配置阿里云千问大模型--环境变量dashscope

1 开通百炼 首先要进入到阿里云平台&#xff0c;然后进入百炼平台。 2 获取API-KEY 进入之后再右上角可以查看到自己的API-KEY&#xff0c;这个东西就是需要配置在环境变量里的。 点击查看就可以获取 3 配置DASHSCOPE环境变量 如果使用dashscope来进行千问大模型的API对…

速度滞后补偿控制

这里介绍的速度滞后补偿控制和我们前面介绍的前馈控制有所区别&#xff0c;前馈控制的前提是能够获取位置参考指令的速度或加速度信号。在无法获取位置参考指令的上述性息的前提下&#xff0c;我们可以采用速度滞后补偿控制提高机电伺服控制系统动态跟踪精度。前馈控制的一些基…

2024社区版IDEA springboot日志输出颜色

IDEA版本&#xff1a;IntelliJ IDEA 2024.1.4 (Community Edition) 1、纯白色终端 2、彩色终端 3、配置过程 1、打开配置 2、选择启动类 3、点击修改选项&#xff0c;勾选虚拟机选项 4、在虚拟机选项框输入以下代码 -Dspring.output.ansi.enabledALWAYS5、应用确定&#xff0…

NLP从零开始------18.文本中阶处理之序列到序列模型(3)

4.3 其他解码问题和解码技巧 贪心解码和束解码只是最基础的解码方法&#xff0c;其解码结果会出现许多问题。这里主要介绍3种常见问题&#xff0c;并简单介绍解决方案。 4.3.1 重复性问题 有时我们会发现序列到序列模型不断重复的输出同一个词。一个解决方案是解码时在所预测的…

GateWay三大案例组件

一、局部过滤器接口耗时&#xff08;LogTime&#xff09; 命名规则&#xff1a;以GatewayFilterFactory结尾编写接口耗时过滤器 Slf4j Component public class LogTimeGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {private static long timeSpan 0…

ruoyi-vue-pro快速修改的包名和选配功能板块

使用KIT进行构建 KIT是一个专门构建框架的网站&#xff0c;ruoyi-vue-pro也发布至KIT了&#xff0c;所以我们可以通过KIT快速的选配功能和修改报名等操作。 构建地址&#xff1a;http://www.goldpankit.com/space/service/install?space%E8%8A%8B%E9%81%93%E6%BA%90%E7%A0%8…

AI建模——AI生成3D内容算法产品介绍与模型免费下载

说明&#xff1a; 记录AI文生3D模型、图生3D模型的相关产品&#xff1b;记录其性能、功能、收费与免费方法 0.AI建模产品 Rodin MeshAnything Meshy 生成效果比较&#xff1a; Rodin效果最好、Meshy其次 1.Rodin 官网&#xff1a;gHyperHuman 支持&#xff1a;文生模型、…