LeetCode——二叉树的层序遍历

news2024/11/28 10:37:08

102. 二叉树的层序遍历 I

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2

输入:root = [1]
输出:[[1]]

示例 3

输入:root = []
输出:[]

提示

树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000

原题链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/

思路
这个只要用一个队列帮助就可以了:
在这里插入图片描述
先存储第一个结点。
在这里插入图片描述
然后访问第一个结点的左右子树,第一个结点出队。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
区分层数采用vector<vector< int>>的方式,用循环,里面的vector< int>是一层,放入一层二叉树的数据,然后再次进入就是下一层了。
代码

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>>arr;
        queue<TreeNode*>q;
        int qsize = 0;//记录结点数用的
        if(root)
        {
            q.push(root);//入队
            qsize = 1;//结点数1
        }
        while(!q.empty())
        {
            vector<int>ar;//一层结点的数据储存
            while(qsize--)//走完层数和结点也有关
            {
                TreeNode*p = q.front();
                q.pop();//出队
                ar.push_back(p->val);//让数据进入
                if(p->left)//不为空入队
                    q.push(p->left);
                if(p->right)
                    q.push(p->right);
            }
            arr.push_back(ar);//将这一层的数据放入arr中
            qsize = q.size();//下一层的结点个数
        }
        return arr;
    }
};

在这里插入图片描述

107. 二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

示例 2

输入:root = [1]
输出:[[1]]

示例 3

输入:root = []
输出:[]

提示

树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000

原题链接:https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/

思路

这道题只要将上面数组反转一下就可以了。
代码

class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        vector<vector<int>>arr;
        queue<TreeNode*>q;
        int qsize = 0;//记录结点数用的
        if(root)
        {
            q.push(root);//入队
            qsize = 1;//结点数1
        }
        while(!q.empty())
        {
            vector<int>ar;//一层结点的数据储存
            while(qsize--)//走完层数和结点也有关
            {
                TreeNode*p = q.front();
                q.pop();//出队
                ar.push_back(p->val);//让数据进入
                if(p->left)//不为空入队
                    q.push(p->left);
                if(p->right)
                    q.push(p->right);
            }
            arr.push_back(ar);//将这一层的数据放入arr中
            qsize = q.size();//下一层的结点个数
        }
        reverse(arr.begin(),arr.end());
        return arr;
    }
};

在这里插入图片描述

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

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

相关文章

超级详解MySQL执行计划explain

1、什么是MySQL执行计划 要对执行计划有个比较好的理解&#xff0c;需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分&#xff0c;分别是 应用层、逻辑层、物理层&#xff0c;不只是MySQL &#xff0c;其他大多数数据库产品都是按这种架构…

窗函数的总结

1. 为什么要加窗 每次FFT变换只能对有限长度的时域数据进行变换&#xff0c;因此&#xff0c;需要对时域信号进行信号截断。即使是周期信号&#xff0c;如果截断的时间长度不是周期的整数倍&#xff08;周期截断&#xff09;&#xff0c;那么&#xff0c;截取后的信号将会存在泄…

C++算法初级10——动态规划

C算法初级10——动态规划 文章目录C算法初级10——动态规划最优化问题动态规划分析流程和条件最优化问题 生活中我们常常遇到这样一些问题&#xff1a; 看到上面的例子&#xff0c;我们发现这些问题都是在最大化&#xff08;或者最小化&#xff09;某个指标&#xff1a;最小化…

leetcode重点题目分类别记录(三)动态规划深入与素数理论

文章目录动态规划背包问题01背包抽象出求解目标尝试进程子问题拆分基本情况根据拆分过程定义dp数组与转移方程遍历顺序与状态压缩模板归纳题目应用变种提升组合问题多维01背包有特殊限制的01背包完全背包尝试进行子问题拆分转移方程题目应用变种提升-求组合/排列数打家劫舍变种…

二维数组的总结

一、时间复杂度和空间复杂度 时间复杂度和空间复杂度是衡量算法效率的两个重要指标。时间复杂度是指算法执行所需的时间&#xff0c;而空间复杂度是指算法执行所需的内存空间。 计算时间复杂度和空间复杂度需要分析算法中各个操作的执行次数和内存使用情况。具体的计算方法可以…

【matlab代码】提取任意多边形内的nc数据--以海洋温度为例子

【matlab代码】提取任意多边形内的nc数据–以海洋温度为例子 本文来源于对象想提取一个矩形内的温度数据,从而求平均能看出时间序列变化。 由于平时我们矩形是和经纬度平行,我们可以直接使用lon,lat进行寻找。 例子如图: 图片 这样的水平图,大家都会,直接: find(lon…

数据库作业合集

目录[TOC](目录)数据库作业第七章&#xff08;1&#xff09;习题7关系模式&#xff08;2&#xff09;习题8关系模式数据库作第三章34数据库作第二章6数据库作业第三章59数据库作业第八章&#xff08;1&#xff09;统计离散数学的成绩分布情况&#xff0c;即按照各分数段统计人数…

ROS--URDF集成Gazebo仿真小车和rviz结合

ROS–URDF集成Gazebo仿真小车 实现流程: 需要编写封装惯性矩阵算法的 xacro 文件为机器人模型中的每一个 link 添加 collision 和 inertial 标签&#xff0c;并且重置颜色属性在 launch 文件中启动 gazebo 并添加机器人模型工作目录 1.编写封装惯性矩阵算法的 head.xacro 文件…

【MySQL】B+树索引——InnoDB 中的索引方案;MylSAM 中的索引方案 和 InnoDB 中的索引方案 对比

一、InnoDB 中的索引方案 1. 聚簇索引 聚簇索引 有两个特点&#xff1a; 使用记录主键值的大小进行记录和页的排序&#xff0c;这包括3方面的含义. &#xff08;1&#xff09;页〈包括叶子节点和内节点〉内的记录按照主键的大小顺序排成一个单向链表&#xff0c;页内的记录被…

MongoDB 介绍和基本操作

一、MongoDB数据库 1、MongoDB是一种非关系型数据库&#xff0c;是用C语言编写的。其特点是高性能、易部署、易使用&#xff0c;存储数据方便。 2、MongoDB特点&#xff1a; 面向集合存储&#xff0c;易于存储对象类型数据&#xff1b;支持动态查询&#xff0c;支持完全索引&…

灌区量测水系统

1)灌区量测水 灌区量测水是水资源管理的基础&#xff0c;是推进节水农业和水价改革的重要手段。常规在主要水闸处&#xff0c;监测闸前和闸后水位及闸门开启状态(闸位)&#xff0c;通过实时监测数据&#xff0c;计算过闸流量。要实现全灌区水资源动态配置、精准灌溉&#xff0…

C语言小项目 -- 通讯录完整代码(登陆系统+动态开辟 + 文件操作)

目录 &#x1f4f0;0. 项目介绍 &#x1f4f0;1. 开发环境及框架 &#x1f4f0;2. 通讯录账户模块功能分析实现&#xff1a; &#x1f4f1;2.1 通讯录账户菜单界面及数据结构设计 &#x1f4f1;2.2 通讯录账户注册功能实现 &#x1f4f1;2.3 通讯录账户登录功能实现 &am…

完美解决丨 - [SyntaxError: invalid syntax](#SyntaxError-invalid-syntax)

目录 报错名称SyntaxError: invalid syntaxNameError: name xx is not definedIndentationError: expected an indented blockAttributeError: xx object has no attribute xxTypeError: xx object is not callableValueError: I/O operation on closed fileOSError: [Errno 2]…

目前的Android 市场怎么样?还好吗?

如今&#xff0c;随着互联网和移动设备的普及&#xff0c;Android 系统已成为全球最大的移动操作系统之一&#xff0c;成为最受欢迎的应用程序开发平台之一。作为一名 Android 开发者&#xff0c;我们生活中的大部分应用程序都是基于 Android 平台开发的&#xff0c;而我们的工…

从字节码分析String创建的几种方式

一.String a new String("a"); 1.到底会不会进入常量池 String a new String("a"); 通过idea中jclasslib插件获取到字节码 0 new #2 3 dup 4 ldc #3 <a> 6 invokespecial #4 <java/lang/String.<init> : (Ljava/lang/String;)V>9 as…

MongoDB 聚合管道中使用数组表达式运算符获取数组长度($size)和反转数组($reverseArray)

数组表达式运算符主要用于文档中数组的操作&#xff0c;本篇我们主要介绍如何使用数组表达式运算符获取数组的长度以及对数组中的数据进行反转&#xff1a; 一、准备数据 初始化成员数据 db.persons.insertMany([{ "_id" : "1001", "name" : …

go错误处理

func test() {num1 : 10num2 : 0result : num1 / num2fmt.Println("result", result)} func main() {test()for {fmt.Println("运行完毕&#xff01; main 下面的代码")time.Sleep(time.Second)}}在默认情况下&#xff0c;当发生错误后(panic) ,程序就会…

港联证券|揭秘涨停 旅游板块掀涨停潮

今天&#xff0c;A股三大股指低开低走。沪深两市收盘共38股涨停。剔除7只ST股&#xff0c;合计31股涨停。另外&#xff0c;14股封板未遂&#xff0c;整体封板率为73.08%。 涨停战场&#xff1a;6股封单资金超亿元 港联证券核算&#xff0c;从收盘涨停板封单量来看&#xff0c;…

【Pytorch】数据预处理

Pytorch是机器学习里面常用的框架之一&#xff0c;我们在学习机器学习之前最好需要学习如何使用这个框架对我们将要使用的数据数据进行预处理操作。 如果我们想要学习好pytorch里面的方法&#xff0c;我们需要常去用一下dir()和help()函数&#xff0c;它们一个会帮我们查看某个…

计算机软考考什么?怎么备考啊?

计算机软考是国家承认的计算机职业资格考试&#xff0c;是计算机行业从业者晋升职业等级的重要途径。计算机软考分为三个等级&#xff0c;分别是&#xff1a;初级、中级和高级。 备考计算机软考需要全面准备&#xff0c;下面我将从如何选择考试科目、如何制定学习计划、如何进…