LeetCode 刷题 -- Day 6

今日题目

题目难度备注
102. 二叉树的层序遍历 中等一招鲜吃遍天
107. 二叉树的层序遍历 II )中等
199. 二叉树的右视图 中等
637. 二叉树的层平均值简单
429. N 叉树的层序遍历中等
515. 在每个树行中找最大值中等
116. 填充每个节点的下一个右侧节点指针中等
104. 二叉树的最大深度 简单
111. 二叉树的最小深度简单

树篇Ⅰ -- 层次遍历

  • 今日题目
  • 题目:102. 二叉树的层序遍历
    • 一、源代码
    • 二、代码思路
  • 题目:107. 二叉树的层序遍历 II
    • 一、源代码
    • 二、代码思路
  • 题目:199. 二叉树的右视图
    • 一、源代码
    • 二、代码思路
  • 题目:637. 二叉树的层平均值
    • 一、源代码
    • 二、代码思路
  • 题目:429. N 叉树的层序遍历
    • 一、源代码
    • 二、代码思路
  • 题目:515. 在每个树行中找最大值
    • 一、源代码
  • 题目:116. 填充每个节点的下一个右侧节点指针
    • 一、源代码
    • 二、代码思路
  • 题目:104. 二叉树的最大深度
    • 一、源代码
    • 二、代码思路
  • 题目:111. 二叉树的最小深度
    • 一、源代码
    • 二、代码思路

题目:102. 二叉树的层序遍历

102. 二叉树的层序遍历 - 力扣(LeetCode)

一、源代码

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int> > ans;if(root == nullptr){return ans;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {                                    //层次遍历队列int n = q.size();vector<int> layer;while(n--) {                                       // 遍历每一层,将遍历的元素出队,并将下一层压入队列TreeNode* now = q.front();q.pop();layer.push_back(now->val);                     //存储每一层的结点值if (now->left) q.push(now->left);if (now->right) q.push(now->right);}ans.push_back(layer);layer.clear();}return ans;}
};

二、代码思路

利用 queue<TreeNode*> q 实现树的层次遍历。在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。


题目:107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II - 力扣(LeetCode)

一、源代码

class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> ans;if (root == nullptr) {return ans;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {                        // 层次遍历队列int n = q.size();vector<int> layer;while (n--) {                           // 遍历每一层,将遍历的元素出队,并将下一层压入队列TreeNode* now = q.front();q.pop();layer.push_back(now->val);          // 存储每一层的结点值if (now->left)q.push(now->left);if (now->right)q.push(now->right);}ans.push_back(layer);layer.clear();}reverse(ans.begin(),ans.end());             //反转层次遍历,得到自底向上的层次遍历return ans;}
};

二、代码思路

反转层次遍历,得到自底向上的层次遍历。官方也这样做,那就心安理得,直接下一题了咯。


题目:199. 二叉树的右视图

199. 二叉树的右视图 - 力扣(LeetCode)

一、源代码

class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<int> ans;if (root == nullptr) {return ans;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {                                 // 层次遍历队列int n = q.size();while (n--) {                                    // 遍历每一层,将遍历的元素出队,并将下一层压入队列TreeNode* now = q.front();q.pop();if(n == 0)  ans.push_back(now->val);         // 将每层最后一个结点压入ans数组中if (now->left)  q.push(now->left);if (now->right) q.push(now->right);}}return ans;}
};

二、代码思路

层次遍历队列,将每层最后一个结点压入ans数组中(此时 n == 0)。


题目:637. 二叉树的层平均值

637. 二叉树的层平均值 - 力扣(LeetCode)

一、源代码

class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<double> ans;if (root == nullptr) {return ans;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {                                  // 层次遍历队列int cnt = q.size(), n = cnt;double sum = 0;while (cnt--) {                                   // 遍历每一层,将遍历的元素出队,并将下一层压入队列TreeNode* now = q.front();q.pop();sum += now->val;                              // 统计每层结点值之和if (now->left)  q.push(now->left);if (now->right) q.push(now->right);}ans.push_back(sum / n);                           // 计算平均值并存入 ans 数组}return ans;}
};

二、代码思路

层次遍历队列,统计每层结点值之和,最后计算平均值并存入 ans数组。


题目:429. N 叉树的层序遍历

429. N 叉树的层序遍历 - 力扣(LeetCode)

一、源代码

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ans;if (root == nullptr) {return ans;}queue<Node*> q;q.push(root);while (!q.empty()) {                           // 层次遍历队列int n = q.size();vector<int> layer;while (n--) {                             // 遍历每一层,将遍历的元素出队,并将下一层压入队列Node* now = q.front();q.pop();layer.push_back(now->val);            // 存储每一层的结点值for (int i = 0; i < now->children.size(); i++) {q.push(now->children[i]);}}ans.push_back(layer);layer.clear();}return ans;}
};

二、代码思路

利用 queue<Node*> q 实现树的层次遍历。在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。


题目:515. 在每个树行中找最大值

515. 在每个树行中找最大值 - 力扣(LeetCode)

一、源代码

class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int> ans;if (root == nullptr) {return ans;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {                       // 层次遍历队列int cnt = q.size(), n = cnt;int maxVal = INT_MIN;while (cnt--) {                      // 遍历每一层,将遍历的元素出队,并将下一层压入队列TreeNode* now = q.front();q.pop();if (now->val > maxVal) maxVal = now->val;if (now->left)  q.push(now->left);if (now->right) q.push(now->right);}ans.push_back(maxVal);}return ans;}
};

题目:116. 填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode)

一、源代码

class Solution {
public:Node* connect(Node* root) {if (root == nullptr) {return root;}queue<Node*> q;q.push(root);while (!q.empty()) {               // 层次遍历队列int cnt = q.size();while (cnt--) {                // 遍历每一层,将遍历的元素出队,并将下一层压入队列Node* now = q.front();q.pop();if (cnt > 0) {             // 连接now->next = q.front();}if (now->left)q.push(now->left);if (now->right)q.push(now->right);}}return root;}
};

二、代码思路

初始状态下,所有 next 指针都被设置为 NULL。所以只要层次遍历树,在每层中进行连接就行。


题目:104. 二叉树的最大深度

104. 二叉树的最大深度 - 力扣(LeetCode)

一、源代码

class Solution {
private:int DFS(TreeNode* root,int h) {if (!root) return h;int l = DFS(root->left,h+1);int r = DFS(root->right,h+1);return l > r ? l : r;}
public:int maxDepth(TreeNode* root) {return DFS(root,0);}
};

二、代码思路

利用递归,每次递归处理一层中的一个结点。对每一层的一个结点有两种情况:

① root 为空指针,则说明递归到底,返回 高度h 就行。

② root 不为空,则找它的左右孩子的高度,并返回较大的高度 h。

对树顶点开始执行递归就得到了最大高度。


题目:111. 二叉树的最小深度

111. 二叉树的最小深度 - 力扣(LeetCode)

一、源代码

class Solution {
private:int minH = INT_MAX;void DFS(TreeNode* root, int h) {if (!root)return ;if (!root->left && !root->right) {        // 遇到叶子结点则更新 minHminH = min(minH,h+1);}DFS(root->left,h+1);DFS(root->right,h+1);}public:int minDepth(TreeNode* root) {DFS(root,0);return root ? minH : 0;                  // 为空指针返回 0,否则返回 minH}
};

二、代码思路

DFS 遍历树,且每下一层高度 h+1,当访问到叶子结点时,就得出了一条从根节点到最近叶子结点的路径长度了(为当前h+1),记录最小的路径长度即为答案

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

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

相关文章

JAVA相关面试题分享

Java 基础知识 1.1 面向对象的特征&#xff08;了解&#xff09; 面向对象的特征&#xff1a;封装、继承、多态、抽象。 封装&#xff1a;就是把对象的属性和行为&#xff08;数据&#xff09;结合为一个独立的整体&#xff0c;并尽可能隐藏对 象的内部实现细节&#xff0c;就…

spring boot 定义启动页 到 login

当前办法只是针对 项目启动后 直接跳转到 指定静态页面 如果有验证身份 安全等问题 可以另外想办法 去添加 &#xff0c;需要的直接 拉过去使用 修改 【"redirect: 需要启动后访问到文件位置得地址 ”】 直接上代码 &#xff1a; import org.springframework.context…

Android手势识别面试问题及回答

问题 1: 如何在Android中实现基本的手势识别&#xff1f; 答案: 在Android中&#xff0c;可以通过使用GestureDetector类来实现基本的手势识别。首先需要创建一个GestureDetector的实例&#xff0c;并实现GestureDetector.OnGestureListener接口来响应各种手势事件&#xff0c…

LeeCode 1728 任意图上博弈

题意 传送门 LeeCode 1728 猫和老鼠 II 题解 任意图上博弈&#xff0c;可参考 Games on arbitrary graphs。具体而言&#xff0c;将博弈双方位置加之先后手状态看作任意图上的一个节点&#xff0c;并根据状态转移建立反图。对于可以确定胜负态的节点&#xff0c;以其为起点&…

【百度Apollo】探索自动驾驶:Apollo 新版本 Beta 全新的Dreamview+,便捷灵活更丰富

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、Dreamview介绍二、Dreamview 新特性2.1、基于模式的多场景——流程更简洁地图视角调节&#xff1a;调试流…

自动驾驶系统中的端到端学习

资料下载-《自动驾驶系统中的端到端学习&#xff08;2020&#xff09;》https://mp.weixin.qq.com/s/ttNpsn7qyVWvDMZzluU_pA 近年来&#xff0c;卷积神经网络显著提高了视觉感知能力。实现这一成功的两个主要因素是将简单的模块组合成复杂的网络和端到端的优化。然而&#xf…

电影交流|基于SprinBoot+vue的电影交流平台小程序系统(源码+数据库+文档)

电影交流平台目录 目录 基于SprinBootvue的电影交流平台小程序系统 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 电影信息管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…

设备能源数据采集新篇章

在当今这个信息化、智能化的时代&#xff0c;设备能源数据的采集已经成为企业高效运营、绿色发展的重要基石。而今天&#xff0c;我们要向大家介绍的就是一款颠覆传统、引领未来的设备能源数据采集神器——HiWoo Box网关&#xff01; 一、HiWoo Box网关&#xff1a;一站式解决…

二维码生成器,一站式解决方案,让您的数字生活更便捷

随着科技的飞速发展&#xff0c;二维码已经成为我们日常生活中不可或缺的一部分。无论是支付、身份验证还是信息传递&#xff0c;二维码都以其高效、便捷的特性赢得了广泛的应用。为了满足不同领域的需求&#xff0c;二维码生成器应运而生&#xff0c;为用户提供了一站式的解决…

解决clickhouse 启动报错

解决clickhouse 启动报错 Error response from daemon: driver failed programming external connectivity on endpoint clickhouse-server (b42457434cebe7d8ad024d31e4fd28eae2139bb2b5046c283bea17ce4398d5b0): Error starting userland proxy: listen tcp4 0.0.0.0:8123: …

RocketMQ MQTT 快速搭建验证

来自业务的需求&#xff0c;需要快速搭建一套支持 MQTT 协议的消息系统。 前期准备&#xff1a; 官方地址&#xff1a;https://github.com/apache/rocketmq-mqtt RocketMQ从4.9.3 版本开始才支持该功能&#xff0c;所以需要先检查 RocketMQ 的版本是否满足。 RocketMQ 部署参…

【知识分享】html+js实现系统拍照上传功能

htmljs实现系统拍照上传功能 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"Keywords" content""/><meta name"Description" content""/><meta http-equiv"X…

kube-prometheus部署到 k8s 集群

文章目录 **修改镜像地址****访问配置****修改 Prometheus 的 service****修改 Grafana 的 service****修改 Alertmanager 的 service****安装****Prometheus验证****Alertmanager验证****Grafana验证****卸载****Grafana显示时间问题** 或者配置ingress添加ingress访问grafana…

JAVA前端快速入门基础_javascript入门(02)

写在前面:本文用于快速学会简易的JS&#xff0c;仅做扫盲和参考作用 1.JavaScript函数 什么是函数:执行特定任务的代码块 1.1定义&#xff1a; 使用function来进行定义(类似于python里面的def 或者java和c里面的void&#xff0c;int这些返回类型开头)。定义规则如下: func…

物联网D1——建工程,配环境,注意事项

1.STLink、JLink、USB等驱动配置keil环境配置——下载芯片对应型号的包——导入库函数源文件、Core内核文件、对应芯片系统文件。 2.学会看芯片手册 3.在STM32微控制器中&#xff0c;CRH通常指的是控制寄存器高位&#xff08;Control Register High&#xff09;。 在这种情况下…

Linux修改文件权限命令 chmod

【例子引入】 以下面命令为例&#xff1a; chmod 777 Random.py 当写入下面名为Random.py的代码后&#xff1a; 如果直接运行&#xff0c;会显示权限不够 当输入 chmod 777 Random.py 更改权限后&#xff0c;才能够正常运行 在终端中输入 这条命令是关于Linux或Unix-like系…

C++——数据结构stack,queue,priority_queue

栈的底层与使用 1.堆栈是计算机科学中的一种抽象数据类型&#xff0c;只允许在有序的线性数据集合的一端&#xff08;称为堆栈顶端&#xff0c;top&#xff09;进行插入数据&#xff08;PUSH&#xff09;和删除数据&#xff08;POP&#xff09;的运算。 2.特点&#xff1a;stac…

[二叉树] 二叉树的前中后三序遍历#知二求一

标题&#xff1a;[二叉树] 二叉树的前中后三序遍历#知二求一 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; 其实这一类题就是考察对二叉树的结构理解&#xff0c;此类题目的二叉树一般通过数组传入&#xff0c;我们只需根据二叉树的就够特点对数…

JAVA同城服务美容美发到店服务上门服务系统源码微信小程序+微信公众号+H5+APP

随着科技的飞速发展&#xff0c;互联网和移动互联网已经渗透到我们生活的方方面面&#xff0c;同城服务美容美发到店服务上门服务系统应运而生&#xff0c;为整个行业带来了巨大的变革和无限的可能。该系统的重要性和优势不言而喻&#xff0c;对于行业发展和用户需求的影响深远…

基于YOLOV8+Pyqt5无人机航拍太阳能电池板检测系统

1.YOLOv8的基本原理 YOLOv8是一种前沿的目标检测技术&#xff0c;它基于先前YOLO版本在目标检测任务上的成功&#xff0c;进一步提升了性能和灵活性&#xff0c;在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上&#xff0c;YOLOv8 引入了新的功能和优化&#xff0c;…