代码随想录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.二叉树的前序遍历 //明确递归的函数,结束边界,单层逻辑 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.固定公网地址访问 前言 无论是个人用户还是企业团队,都希望能够有一个高效、安全的解决方案来…...
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:数据库连接管理(支持连接池)QSqlQuery:SQL语句执行与结果遍历QSqlTableModel:可编辑的表格数据模型QSqlQueryModel:只读查询结果模型QSqlRelationalTab…...

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

Kafka偏移量管理全攻略:从基础概念到高级操作实战
#作者:猎人 文章目录 前言:概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…...

【R语言】GitHub Copilot安装-待解决
参考: 文章目录...

软件定义汽车时代的功能安全和信息安全
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...
qt的QSizePolicy的使用
使用 QSizePolicy 设置控件的伸缩因子 在 Qt 中,QSizePolicy 控制 控件如何在布局中伸缩。如果想要影响控件的大小调整行为,可以通过 QSizePolicy::setHorizontalStretch() 和 QSizePolicy::setVerticalStretch() 设置伸缩因子。 基本用法 假设我们有一个…...

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标
作为国产数据库的领军选手,金仓数据库(KingbaseES)凭借其成熟的技术架构和广泛的市场覆盖,在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业,还是铁路、医疗等关键领域,金仓数据库都以其卓…...

DeepSeek自动化写作软件
DeepSeek写作软件的三大核心功能 对于内容创作者来说,写作不仅是表达思想的过程,更是一项需要投入大量时间和精力的任务。面对日益增长的内容需求,写作效率低下、内容质量不高等问题,常常让创作者感到焦虑。而 DeepSeek 写作软件…...
【kafka系列】Kafka如何实现高吞吐量?
目录 1. 生产者端优化 核心机制: 关键参数: 2. Broker端优化 核心机制: 关键源码逻辑: 3. 消费者端优化 核心机制: 关键参数: 全链路优化流程 吞吐量瓶颈与调优 总结 Kafka的高吞吐能力源于其生…...
learn_pytorch03
第三章 深度学习分为如下几个步骤 1:数据预处理,划分训练集和测试集 2:选择模型,设定损失函数和优化函数 3:用模型取拟合训练数据,并在验证计算模型上表现。 接着学习了一些数据读入 模型构建 损失函数的构…...

机器学习:k近邻
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 K 邻近算法(K-Nearest Neighbors,简称 KNN)是一种经典的机器学习算法,主要用于分类和回归任务…...
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 (OBD 2 & Car) 链接:https://pan.xunlei.com/s/VOIyKOKHBR-2XTUy6oy9A91yA1?pwdm5jm# 获取 OBD 故障代码、汽车性能数据等等。Torque 使用连接到您的 OBD2 发动机管理/ECU 的 OBD II 蓝牙适配器。…...
安全问答—安全的基本架构
前言 将一些安全相关的问答进行整理汇总和陈述,形成一些以问答呈现的东西,加入一些自己的理解,欢迎路过的各位大佬进行讨论和论述。很多内容都会从甲方的安全认知去进行阐述。 1.安全存在的目的? 为了支持组织的目标、使命和宗…...
Java 运行时常量池笔记(详细版
📚 Java 运行时常量池笔记(详细版) Java 的运行时常量池(Runtime Constant Pool)是 JVM 方法区的一部分,用于存储编译期生成的字面量和符号引用。它是 Java 类文件常量池的运行时表示,具有动态…...
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 中,如果你想输出数据包列表本身的值(例如,将数据包的摘要信息、时间戳、源地址、目的地址等导出为文本格式),可以使用 导出为纯文本文件 的功能。以下是详细步骤: 步骤 1:打开 Wir…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...