C++算法题 - 二叉树层次遍历

目录

  • 199. 二叉树的右视图
  • 637. 二叉树的层平均值
  • 102. 二叉树的层序遍历
  • 103. 二叉树的锯齿形层序遍历

199. 二叉树的右视图

LeetCode_link


给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:
在这里插入图片描述
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:
输入: [1,null,3]
输出: [1,3]

示例 3:
输入: []
输出: []

提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100


思路:用队列

/*** 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<int> rightSideView(TreeNode* root) {if(root == nullptr) return {};queue<TreeNode*> q;TreeNode* r = root;vector<int> rec;q.push(root);while(!q.empty()){TreeNode* node = q.front();if(node->left != nullptr)  q.push(node->left);if(node->right != nullptr) q.push(node->right);if(node == r){rec.push_back(node->val);r = q.back();}q.pop();}return rec;}
};

637. 二叉树的层平均值

LeetCode_link


给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10^-5 以内的答案可以被接受。

示例 1
在这里插入图片描述
输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。

示例 2:
在这里插入图片描述
输入:root = [3,9,20,15,7]
输出:[3.00000,14.50000,11.00000]

提示
树中节点数量在 [1, 10^4] 范围内
-2^31 <= Node.val <= 2^31 - 1


思路:用队列

/*** 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<double> averageOfLevels(TreeNode* root) {queue<TreeNode*> q;TreeNode* r = root;q.push(root);int count = 0;double sum = 0;vector<double> rec;while(!q.empty()){TreeNode* node = q.front();if(node->left != nullptr)   q.push(node->left);if(node->right != nullptr)  q.push(node->right);count ++;sum += node->val;if(node == r){rec.push_back(sum / count);sum = 0;count = 0;r = q.back();}q.pop();}return rec;}
};

102. 二叉树的层序遍历

LeetCode_link


给你二叉树的根节点 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


思路:队列

/*** 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) {if(root == nullptr) return {};queue<TreeNode*> q;TreeNode* r = root;q.push(root);vector<vector<int>> rec;vector<int> temp;while(!q.empty()){TreeNode* node = q.front();if(node->left != nullptr)   q.push(node->left);if(node->right != nullptr)  q.push(node->right);temp.push_back(node->val);if(node == r){rec.push_back(temp);temp.clear();r = q.back();}q.pop();}return rec;}
};

103. 二叉树的锯齿形层序遍历

LeetCode_link


示例 1
在这里插入图片描述
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]

示例 2
输入:root = [1]
输出:[[1]]

示例 3
输入:root = []
输出:[]

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


思路:先层次遍历,之后再考虑翻转

/*** 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>> zigzagLevelOrder(TreeNode* root) {if(root == nullptr) return {};queue<TreeNode*> q;TreeNode* r = root;q.push(root);vector<vector<int>> rec;vector<int> temp;while(!q.empty()){TreeNode* node = q.front();if(node->left != nullptr)   q.push(node->left);if(node->right != nullptr)  q.push(node->right);temp.push_back(node->val);if(node == r){rec.push_back(temp);temp.clear();r = q.back();}q.pop();}vector<vector<int>> recc;for(int i = 0; i < rec.size(); i++){if(i % 2 == 1){recc.push_back(reserve(rec[i]));}else{recc.push_back(rec[i]);}}return recc;}vector<int> reserve(vector<int> t){int left = 0, right = t.size()-1;while(left < right){swap(t[left], t[right]);left ++;right --;}return t;}
};

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

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

相关文章

Java性能优化(一):Java基础-ArrayList和LinkedList

引言 集合作为一种存储数据的容器&#xff0c;是我们日常开发中使用最频繁的对象类型之一。JDK为开发者提供了一系列的集合类型&#xff0c;这些集合类型使用不同的数据结构来实现。因此&#xff0c;不同的集合类型&#xff0c;使用场景也不同。 很多同学在面试的时候&#x…

自刷广告变现,APP收益如何提高

广告变现&#xff0c;是许多APP开发者和运营者追求的目标。然而&#xff0c;对于一些新手来说&#xff0c;如何进行广告变现&#xff0c;特别是如何去自刷广告变现&#xff0c;却是一个让人头疼的问题。实际上&#xff0c;只要在平台的规则内操作&#xff0c;自刷广告也是可以进…

Colibri for Mac v2.2.0激活版:专业级无损音乐播放器

Colibri for Mac是一款专为Mac用户设计的高分辨率无损音乐播放器。它基于BASS技术构建&#xff0c;为用户带来极致的音频体验。Colibri支持所有流行的无损和有损音频格式&#xff0c;如FLAC、MP3、AAC等&#xff0c;确保音乐播放的清晰度和完美度。其独特的清晰比特完美播放技术…

VS2022Qt6通过ODBC连接MySQL

QSqlDatabase是Qt框架中用于管理数据库连接的类。它提供了一种在Qt应用程序中连接和操作数据库的方式。通过QSqlDatabase&#xff0c;可以连接到各种类型的数据库&#xff0c;并执行查询、插入、更新和删除等操作&#xff0c;Qt通过ODBC连接数据库的第一步就是初始化QSqlDataba…

通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu

通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu 一.代码 某种设备在运行pytorch算子时,如果不支持会自动fallback到cpu,输出的tensor.device却不是cpu,我希望能获取到这个状态。本文通过捕获标准输出,根据终端是否输出fallback字符串,判断是否触…

Android内核之Binder通信写操作:binder_thread_write用法实例(七十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

终端安全管理措施有哪些?好用终端安全管理软件推荐(建议收藏)

在当今数字化时代&#xff0c;信息安全已成为企业运营不可或缺的一部分。其中&#xff0c;终端安全为您详细介绍&#xff0c;并推荐几款好用的终端安全管理软件&#xff0c;帮助您更好地保护企业信息安全。管理是确保企业信息安全的重要环节。那么&#xff0c;终端安全管理措施…

Kettle连接Mysql数据库时报错——Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found

一、问题描述 当我们使用ETL工具Kettle需要连接Mysql数据库进行数据清洗操作,在配置好Mysql的连接串内容后,点击【测试】按钮时报错【错误连接数据库 [MysqlTestConnection] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to conne…

如何关闭HDFS的高可用性(HA)

要关闭HDFS的高可用性&#xff08;HA&#xff09;&#xff0c;你需要执行以下步骤&#xff1a; 1. 停止HDFS服务&#xff1a; 在关闭HA之前&#xff0c;首先需要停止HDFS服务。可以使用以下命令停止HDFS&#xff1a; sudo service hadoop-hdfs-namenode stopsudo service hadoo…

搭建Springboot的基础开发框架-01

本系列专题虽然是按教学的深度来定稿的&#xff0c;但在项目结构和代码组织方面是按公司系统的要求来书定的。在本章中主要介绍下基础开发框架的功能。后续所有章节的项目全是在本基础框架的基础上演进的。 工程结构介绍 SpringbootSeries&#xff1a;父工程&#xff0c;定义一…

MyBatis高级扩展

五、MyBatis高级扩展 5.1 Mapper批量映射优化 需求Mapper 配置文件很多时&#xff0c;在全局配置文件中一个一个注册太麻烦&#xff0c;希望有一个办法能够一劳永逸。 配置方式Mybatis 允许在指定 Mapper 映射文件时&#xff0c;只指定其所在的包&#xff1a; <mappers&…

算法训练营第60天|LeetCode 647.回文子串 516.最长回文子序列

LeetCode 647.回文子串 题目链接&#xff1a; LeetCode 647.回文子串 代码&#xff1a; class Solution { public:int countSubstrings(string s) {int size s.size();int result 0;vector<vector<int>>dp(size,vector<int>(size,false));for(int i si…

SystemVerilog/Verilog中的仿真延时建模之门延时

提到门延时,就必须重提分布延迟。 分布延迟指模块内信号从(逻辑门的输入到输出)或者(线网的延迟)。这里虽然简短一句话,却涵盖非常大的信息量。 一 门延迟种类 今天我们着重看门延迟。常见门延迟主要有三种: 注意!:如果信号从0/1/z变化到x,那么此时的门传输延迟为上…

C语言 函数概述

好 接下来 我们来讲函数 构建C程序的最佳方式 就是模块化程序设计 C语言中 最基本的程序模块被称为 函数 所以 这个知识点的重要性不言而喻 这里 我们讲个故事 诸葛亮六出祁山时 为了逼司马懿出战 派人送给力司马懿一件女人衣服 司马懿只是为使者 诸葛亮的饮食起居 使者感叹…

AI绘图神器!InstantStyle保留风格进行文本到图像生成

在今天的数字化时代&#xff0c;我们可以看到AI技术的应用已经渗透到生活的各个角落&#xff0c;尤其是在视觉艺术领域。最近&#xff0c;一个名为InstantStyle的全新框架引起了广泛关注&#xff0c;它是一个创新的文本到图像生成框架&#xff0c;其核心功能在于能够有效地分离…

【NumPy数组】:深入解析numpy.array()函数

NumPy数组&#xff1a;深入解析numpy.array()函数 引言 在Python的数据科学世界中&#xff0c;NumPy库无疑扮演着举足轻重的角色。NumPy&#xff08;Numerical Python的简称&#xff09;是一个开源的Python库&#xff0c;用于进行大规模数值和矩阵计算&#xff0c;同时提供了…

Python实现3D建模工具(下)

#Python实现3D建模工具 ###用户接口 我们希望与场景实现两种交互&#xff0c;一种是你可以操纵场景从而能够从不同的角度观察模型&#xff0c;一种是你拥有添加与操作修改模型对象的能力。为了实现交互&#xff0c;我们需要得到键盘与鼠标的输入&#xff0c;GLUT允许我们在键盘…

IoTDB 入门教程 基础篇⑥——数据库SQL操作 | 数据库管理和数据读写

文章目录 一、前文二、数据库管理2.1 创建数据库2.2 查询数据库2.3 删除数据库 三、数据读写3.1 查询数据3.2 新增数据3.3 修改数据3.4 删除数据 四、参考 一、前文 IoTDB入门教程——导读 本博文主要讲述数据库管理和数据读写 二、数据库管理 2.1 创建数据库 CREATE DATABASE…

【JVM】类加载机制及双亲委派模型

目录 一、类加载过程 1. 加载 2. 连接 a. 验证 b. 准备 c. 解析 3. 初始化 二、双亲委派模型 类加载器 双亲委派模型的工作过程 双亲委派模型的优点 一、类加载过程 JVM的类加载机制是JVM在运行时&#xff0c;将 .class 文件加载到内存中并转换为Java类的过程。它…

全面升级企业网络安全 迈入SASE新时代

随着数字化业务、云计算、物联网和人工智能等技术的飞速发展&#xff0c;企业的业务部署环境日渐多样化&#xff0c;企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及&#xff0c;企业多分支机构的加速设立&#xff0c;也使得企业业务系统的用户范…