当前位置: 首页 > news >正文

代码随想录day12

144.二叉树的前序遍历

//明确递归的函数,结束边界,单层逻辑

    void traversal(TreeNode* node, vector<int>& list){if(node == nullptr){return;}list.push_back(node->val);traversal(node->left, list);traversal(node->right, list);}vector<int> preorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}

//迭代法

    vector<int> preorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> traversal;if(root == nullptr){return result;}traversal.push(root);while(!traversal.empty()){TreeNode* cur = traversal.top();result.push_back(cur->val);traversal.pop();if(cur->right) traversal.push(cur->right);if(cur->left) traversal.push(cur->left);}return result;}

//统一迭代法

    vector<int> preorderTraversal(TreeNode* root) {vector<int> result;stack<pair<TreeNode*, bool>> st;if(root == nullptr) return result;st.push(make_pair(root, false));while(!st.empty()){auto node = st.top();st.pop();if(node.second){result.push_back(node.first->val);} else {if(node.first->right) st.push(make_pair(node.first->right, false));if(node.first->left) st.push(make_pair(node.first->left, false));st.push(make_pair(node.first, true));}}return result;}

145.二叉树的后序遍历

    void traversal(TreeNode* node, vector<int>& list){if(node == nullptr){return;}traversal(node->left, list);traversal(node->right, list);list.push_back(node->val);}vector<int> postorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}

//迭代法 左右中-》中右左-〉中左右

    vector<int> postorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> traversal;if(root == nullptr) return result;traversal.push(root);while(!traversal.empty()){TreeNode* cur = traversal.top();result.push_back(cur->val);traversal.pop();if(cur->left) traversal.push(cur->left);if(cur->right) traversal.push(cur->right);}reverse(result.begin(), result.end());return result;}

//统一迭代法

    vector<int> postorderTraversal(TreeNode* root) {vector<int> result;stack<pair<TreeNode*,bool>> st;if(root == nullptr) return result;st.push(make_pair(root, false));while(!st.empty()){auto node = st.top();st.pop();if(node.second){result.push_back(node.first->val);}else{st.push(make_pair(node.first, true));if(node.first->right) st.push(make_pair(node.first->right, false));if(node.first->left) st.push(make_pair(node.first->left, false));}}return result;}

94.二叉树的中序遍历

    void traversal(TreeNode* node, vector<int>& list){if(node == nullptr){return;}traversal(node->left, list);list.push_back(node->val);traversal(node->right, list);}vector<int> inorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}

//迭代法,需理解左中右无法直接处理

    vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;if(root == nullptr) return result;TreeNode* cur = root;while(cur != nullptr || !st.empty()){if(cur != nullptr){st.push(cur);cur = cur->left;}else{cur = st.top();result.push_back(cur->val);st.pop();cur = cur->right;}}return result;}

//统一迭代法

    vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<pair<TreeNode*, bool>> st;if(root == nullptr) return result;st.push(make_pair(root, false));while(!st.empty()){auto node = st.top();st.pop();if(node.second) {result.push_back(node.first->val);}else{if(node.first->right) st.push(make_pair(node.first->right, false));st.push(make_pair(node.first, true));if(node.first->left) st.push(make_pair(node.first->left, false));}}return result;}

102.二叉树的层序遍历

//广度优先遍历,使用queue的迭代法

    vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;queue<TreeNode*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();vector<int> tmp;for(int i = 0; i < sz; i++){auto node = qe.front();qe.pop();tmp.push_back(node->val);if(node->left) qe.push(node->left);if(node->right) qe.push(node->right);}result.push_back(tmp);}return result;}

//递归法

    void order(vector<vector<int>>& result, TreeNode* node, int depth){if(node == nullptr) return;if(result.size() == depth) result.push_back(vector<int>());result[depth].push_back(node->val);if(node->left) order(result, node->left, depth+1);if(node->right) order(result, node->right, depth+1);return;}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;order(result, root, 0);return result;}

107.二叉树的层序遍历II

上题结果reverse即可。

199.二叉树的右视图

//保存层序遍历中每层的最后一位

    vector<int> rightSideView(TreeNode* root) {vector<int> result;queue<TreeNode*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();vector<int> tmp;for(int i = 0; i < sz; i++){TreeNode* node = qe.front();qe.pop();tmp.push_back(node->val);if(node->left){qe.push(node->left);}if(node->right) {qe.push(node->right);}}result.push_back(tmp[sz-1]);}return result;}

637.二叉树的层平均值

//计算每层的总和然后除以size即可

    vector<double> averageOfLevels(TreeNode* root) {vector<double> result;queue<TreeNode*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();double tmp = 0;for(int i = 0; i < sz; i++){TreeNode* node = qe.front();qe.pop();tmp += node->val;if(node->left) qe.push(node->left);if(node->right) qe.push(node->right);}double x = tmp/sz;result.push_back(x);}return result;}

429.N叉树的层序遍历

    vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> result;queue<Node*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();vector<int> tmp;for(int i = 0; i < sz; i++){Node* nd = qe.front();qe.pop();tmp.push_back(nd->val);int cd_sz = nd->children.size();for(int j = 0; j < cd_sz; j++){if(nd->children[j]){qe.push(nd->children[j]);}}}result.push_back(tmp);}return result;}

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

    vector<int> largestValues(TreeNode* root) {vector<int> result;queue<TreeNode*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();int tmp = qe.front()->val;for(int i = 0; i < sz; i++){TreeNode* node = qe.front();qe.pop();if(node->val > tmp) tmp = node->val;if(node->left) qe.push(node->left);if(node->right) qe.push(node->right);}result.push_back(tmp);} return result;}

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

117.填充每个节点的下一个右侧节点指针II 同解

    Node* connect(Node* root) {queue<Node*> qe;if(root == nullptr) return root;qe.push(root);while(!qe.empty()){int sz = qe.size();for(int i = 0; i < sz; i++){Node* nd = qe.front();qe.pop();if(i == sz - 1){nd->next = nullptr;}else{nd->next = qe.front();}if(nd->left) qe.push(nd->left);if(nd->right) qe.push(nd->right); }}return root;}

104.二叉树的最大深度

    int maxDepth(TreeNode* root) {int result = 0;queue<TreeNode*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();for(int i = 0; i < sz; i++){TreeNode* nd = qe.front();qe.pop();if(nd->left) qe.push(nd->left);if(nd->right) qe.push(nd->right);}result += 1;}return result;}

111.二叉树的最小深度

    int minDepth(TreeNode* root) {int result = 0;queue<TreeNode*> qe;if(root == nullptr) return result;qe.push(root);while(!qe.empty()){int sz = qe.size();result += 1;for(int i = 0; i < sz; i++){TreeNode* nd = qe.front();qe.pop();if(!nd->left && !nd->right) return result;if(nd->left) qe.push(nd->left);if(nd->right) qe.push(nd->right);}}return result;}

最近几天有点事,拖了进度,后序需坚持跟上,加油

相关文章:

代码随想录day12

144.二叉树的前序遍历 //明确递归的函数&#xff0c;结束边界&#xff0c;单层逻辑 void traversal(TreeNode* node, vector<int>& list){if(node nullptr){return;}list.push_back(node->val);traversal(node->left, list);traversal(node->right, list)…...

告别第三方云存储!用File Browser在Windows上自建云盘随时随地访问

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队&#xff0c;都希望能够有一个高效、安全的解决方案来…...

Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL

NGX_MAX_ALLOC_FROM_POOL 定义在 src\core\ngx_palloc.h #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) 在 src/os/unix/ngx_alloc.h extern ngx_uint_t ngx_pagesize; 这个全局变量定义在 src\os\unix\ngx_alloc.c 中 ngx_uint_t ngx_pagesize; 在 src/os/unix/ngx_…...

PyQt6/PySide6 的 SQL 数据库操作(QtSql)

一、核心组件架构 1.1 QtSql模块构成 QSqlDatabase&#xff1a;数据库连接管理&#xff08;支持连接池&#xff09;QSqlQuery&#xff1a;SQL语句执行与结果遍历QSqlTableModel&#xff1a;可编辑的表格数据模型QSqlQueryModel&#xff1a;只读查询结果模型QSqlRelationalTab…...

利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析

文章目录 引言&#xff1a;当.class文件遇到源代码缺失第一章&#xff1a;反编译技术基础认知1.1 Java编译执行原理1.2 反编译的本质1.3 法律与道德边界 第二章&#xff1a;IDEA内置反编译工具详解2.1 环境准备2.2 三步完成基础反编译2.3 高级反编译技巧2.3.1 调试模式反编译2.…...

Kafka偏移量管理全攻略:从基础概念到高级操作实战

#作者&#xff1a;猎人 文章目录 前言&#xff1a;概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…...

【R语言】GitHub Copilot安装-待解决

参考&#xff1a; 文章目录...

软件定义汽车时代的功能安全和信息安全

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…...

qt的QSizePolicy的使用

使用 QSizePolicy 设置控件的伸缩因子 在 Qt 中&#xff0c;QSizePolicy 控制 控件如何在布局中伸缩。如果想要影响控件的大小调整行为&#xff0c;可以通过 QSizePolicy::setHorizontalStretch() 和 QSizePolicy::setVerticalStretch() 设置伸缩因子。 基本用法 假设我们有一个…...

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标

作为国产数据库的领军选手&#xff0c;金仓数据库&#xff08;KingbaseES&#xff09;凭借其成熟的技术架构和广泛的市场覆盖&#xff0c;在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业&#xff0c;还是铁路、医疗等关键领域&#xff0c;金仓数据库都以其卓…...

DeepSeek自动化写作软件

DeepSeek写作软件的三大核心功能 对于内容创作者来说&#xff0c;写作不仅是表达思想的过程&#xff0c;更是一项需要投入大量时间和精力的任务。面对日益增长的内容需求&#xff0c;写作效率低下、内容质量不高等问题&#xff0c;常常让创作者感到焦虑。而 DeepSeek 写作软件…...

【kafka系列】Kafka如何实现高吞吐量?

目录 1. 生产者端优化 核心机制&#xff1a; 关键参数&#xff1a; 2. Broker端优化 核心机制&#xff1a; 关键源码逻辑&#xff1a; 3. 消费者端优化 核心机制&#xff1a; 关键参数&#xff1a; 全链路优化流程 吞吐量瓶颈与调优 总结 Kafka的高吞吐能力源于其生…...

learn_pytorch03

第三章 深度学习分为如下几个步骤 1&#xff1a;数据预处理&#xff0c;划分训练集和测试集 2&#xff1a;选择模型&#xff0c;设定损失函数和优化函数 3&#xff1a;用模型取拟合训练数据&#xff0c;并在验证计算模型上表现。 接着学习了一些数据读入 模型构建 损失函数的构…...

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…...

redis之lua实现原理

文章目录 创建并修改Lua环境Lua环境协作组件伪客户端lua scripts字典 EVAL命令的实现定义脚本函数执行脚本函数 EVALSHA命令的实现脚本管理命令的实现SCRIPT FLUSHSCRIPTEXISTSSCRIPT LOADSCRIPT KILL 脚本复制复制 EVAL命令、SCRIPT FLUSH命令和SCRIPT LOAD命令* 复制EVALSHA命…...

[Android] 【汽车OBD软件】Torque Pro (OBD 2 Car)

[Android] 【汽车OBD软件】Torque Pro &#xff08;OBD 2 & Car&#xff09; 链接&#xff1a;https://pan.xunlei.com/s/VOIyKOKHBR-2XTUy6oy9A91yA1?pwdm5jm# 获取 OBD 故障代码、汽车性能数据等等。Torque 使用连接到您的 OBD2 发动机管理/ECU 的 OBD II 蓝牙适配器。…...

安全问答—安全的基本架构

前言 将一些安全相关的问答进行整理汇总和陈述&#xff0c;形成一些以问答呈现的东西&#xff0c;加入一些自己的理解&#xff0c;欢迎路过的各位大佬进行讨论和论述。很多内容都会从甲方的安全认知去进行阐述。 1.安全存在的目的&#xff1f; 为了支持组织的目标、使命和宗…...

Java 运行时常量池笔记(详细版

&#x1f4da; Java 运行时常量池笔记&#xff08;详细版&#xff09; Java 的运行时常量池&#xff08;Runtime Constant Pool&#xff09;是 JVM 方法区的一部分&#xff0c;用于存储编译期生成的字面量和符号引用。它是 Java 类文件常量池的运行时表示&#xff0c;具有动态…...

mysql增加字段操作以及关键字报错

修改mysql DDL语言 修改代码中domain 修改mapper中信息 java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near index, date, scroll_id, shard_ser…...

Wireshark 输出 数据包列表本身的值

在 Wireshark 中&#xff0c;如果你想输出数据包列表本身的值&#xff08;例如&#xff0c;将数据包的摘要信息、时间戳、源地址、目的地址等导出为文本格式&#xff09;&#xff0c;可以使用 导出为纯文本文件 的功能。以下是详细步骤&#xff1a; 步骤 1&#xff1a;打开 Wir…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...