408算法题leetcode--第17天
101. 对称二叉树
- 101. 对称二叉树
- 思路:递归,对称即两个子树的左边和右边分别一样;一个子树是左中右遍历,另一个是右中左遍历;写的时候可以分三步,确定函数参数以及返回类型,确定终止条件,确定递归逻辑
- 时间和空间:O(n)
/*** 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:bool check(TreeNode* lhs, TreeNode* rhs){if(!lhs && !rhs) return true;if(!lhs || !rhs) return false;return lhs->val == rhs->val && check(lhs->left, rhs->right) && check(lhs->right, rhs->left);}bool isSymmetric(TreeNode* root) {return check(root, root);}
};
226. 翻转二叉树
- 226. 翻转二叉树
- 思路:如注释;其实就是树的后序遍历
- 时间和空间:O(n)
/*** 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:TreeNode* invertTree(TreeNode* root) {// 翻转左边,翻转右边,当前节点的left和right互换if(root == nullptr) return nullptr;TreeNode* left = invertTree(root->left);TreeNode* right = invertTree(root->right);root->left = right;root->right = left;return root;}
};
103. 二叉树的锯齿形层序遍历
- 103. 二叉树的锯齿形层序遍历
- 思路:入队和正常bfs相同,但是需要临时数组做翻转/用双端队列存储
- 时间和空间:O(n)
/*** 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) {vector<vector<int>>ret;if(root == nullptr) return ret;queue<TreeNode*>q;q.push(root);while(!q.empty()){int size = q.size();vector<int>temp_ret;for(int i = 0; i < size; i++){TreeNode* temp = q.front();q.pop();temp_ret.push_back(temp->val);if(temp->left) q.push(temp->left);if(temp->right) q.push(temp->right);}if(ret.size() % 2 == 1) reverse(temp_ret.begin(), temp_ret.end());ret.push_back(temp_ret);} return ret;}
};
- 双端存储的
/*** 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) {vector<vector<int>>ret;if(root == nullptr) return ret;queue<TreeNode*>q;q.push(root);int left_order = 1;while(!q.empty()){int size = q.size();deque<int>dq;for(int i = 0; i < size; i++){TreeNode* temp = q.front();q.pop();if(left_order){dq.push_back(temp->val);} else {dq.push_front(temp->val);}if(temp->left) q.push(temp->left);if(temp->right) q.push(temp->right);}ret.emplace_back(vector<int>(dq.begin(), dq.end()));left_order = !left_order;} return ret;}
};
105. 从前序与中序遍历序列构造二叉树
- 105. 从前序与中序遍历序列构造二叉树
- 思路:前序找根节点,中序找到对应节点然后进行数组的分割,最后递归两边继续
- 时间和空间:O(n)
/*** 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:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if(preorder.empty()) return nullptr;// 前序找根节点TreeNode* root = new TreeNode(preorder[0]);if(preorder.size() == 1) return root;// 中序找对应节点的位置int id = 0, size = inorder.size();for(; id < size; id++){if(inorder[id] == root->val){break;}}// 分割两个数组vector<int>left_in{inorder.begin(), inorder.begin() + id};vector<int>right_in{inorder.begin() + id + 1, inorder.end()};vector<int>left_pre{preorder.begin() + 1, preorder.begin() + id + 1};vector<int>right_pre{preorder.begin() + id + 1, preorder.end()};root->left = buildTree(left_pre, left_in);root->right = buildTree(right_pre, right_in);return root;}
};
相关文章:
408算法题leetcode--第17天
101. 对称二叉树 101. 对称二叉树思路:递归,对称即两个子树的左边和右边分别一样;一个子树是左中右遍历,另一个是右中左遍历;写的时候可以分三步,确定函数参数以及返回类型,确定终止条件&#…...
机器人顶刊IEEE T-RO发布无人机动态环境高效表征成果:基于粒子的动态环境连续占有地图
摘要:本研究有效提高了动态环境中障碍物建模的精度和效率。NOKOV度量动作捕捉系统助力评估动态占用地图在速度估计方面的性能。 近日,上海交通大学、荷兰代尔夫特理工研究团队在机器人顶刊IEEE T-RO上发表题为Continuous Occupancy Mapping in Dynamic …...
spring-boot web + vue
依赖的软件 maven 1. 官网下载zip 文件,比如apache-maven-3.9.9-bin.zip 2. 解压到某个盘符,必须保证父亲目录的名字包含英文,数字,破折号(-) 3. 设置环境变量M2_HOME, 并将%M2_HOME%\bin添加到windown…...
HDFS分布式文件系统01-HDFS架构与SHELL操作
HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…...
Go语言流程控制
Go语言流程控制 1.IF-ELSE2.Switch-Caseswitch 语句Type Switch 3.select 语句4.循环语句 1.IF-ELSE Go 编程语言中 if 语句的语法如下: if 布尔表达式 {/* 在布尔表达式为 true 时执行 */ }例如: package mainimport "fmt"func main() {va…...
无人机在救灾方面的应用!
一、灾害监测与评估 实时监测与评估:无人机可以快速到达灾害现场,通过搭载的高清摄像头、红外热成像仪等设备,对灾区进行实时监测和灾情评估。根据捕捉到的受灾范围、火势大小、建筑物损坏情况等关键信息,为救援行动提供决策依据…...
面试知识点总结篇一
一、C语言和C有什么区别 C语言是面向过程,强调用函数将问题分解为多个子任务,按顺序逐步进行。数据和操作分开C则是面向对象,面向对象是一种基于对象和类的编程范式,关注如何利用对象来抽象和模拟现实世界的实体。因此引入了类&a…...
【计算机网络 - 基础问题】每日 3 题(二十五)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...
【第十八章:Sentosa_DSML社区版-机器学习之协同过滤】
【第十八章:Sentosa_DSML社区版-机器学习之协同过滤】 1.算子介绍 协同过滤是推荐系统中常用的一种方法。该算法旨在填补用户-产品关联矩阵中缺少的项。在算法中,用户和产品都是通过一组少量的潜在因素描述,这些潜在因素可以用于预测用户-产…...
TDOA方法求二维坐标的MATLAB代码演示与讲解
引言 时间差定位(Time Difference of Arrival, TDOA)是一种用于确定信号源位置的技术,广泛应用于无线通信、声学定位等领域。通过测量信号到达多个接收器的时间差,可以计算出信号源的二维坐标。本文将通过MATLAB代码演示如何使用TDOA方法来求解二维坐标。 TDOA原理 TDOA…...
基于微信的原创音乐小程序的设计与实现+ssm论文源码调试讲解
第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&…...
基于大数据技术的颈椎病预防交流与数据分析及可视化系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
Spring MVC中实现一个文件上传和下载功能
说到文件上传和下载,相信每个开发者都有或多或少的接触过文件上传的功能吧,文件上传和下载是我们在学习计算机网络应用常见的一个功能,主要涉及到用户和服务器之间的数据传输。 我们来对文件上传和下载功能的进行相关概述吧! 文…...
Webpack 介绍
Webpack 介绍 Date: August 29, 2024 全文概要 Webpack概念: Webpack是一个静态的模块化的打包工具,可以为现代的 JavaSript 应用程序进行打包。 1-静态:Webpack可以将代码打包成最终的静态资源 2-模块化:webpack支持各种模块…...
在Linux实时监控某个应用是否运行,未运行,执行运行命令
1、shell脚本(每隔30秒检测一次) 脚本要注意的地方是:在Nodepad编辑的时候要使用Unix(LF)格式,避免在Linux无法执行命令 #!/bin/bash# RabbitMQ进程名称(可能需要根据你的安装进行调整) RABBITMQ_PROCE…...
Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出
01、提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储。许多接收器由更广泛的 Serilog 社区开发和支持;可以通过在 NuGet 上搜索 serilog 标签找到。 02、增强器 日志事件可以通过多种方式增强属性。通过 NuGet 提供了一些预构建的增强器ÿ…...
傅里叶级数在机器人中的应用(动力学参数辨识)
B站首发!草履虫都能看懂的【傅里叶变换】讲解,清华大学李永乐老师教你如何理解傅里叶变换,辨清美颜和变声原理,!!_哔哩哔哩_bilibiliB站首发!草履虫都能看懂的【傅里叶变换】讲解,清…...
前端框架Vue、React、Angular、Svelte对比
在对比 React、Vue.js、Angular 和 Svelte 时,除了在高层次的特性上有显著差异,它们在核心设计理念和底层实现机制上也有明显的不同。为了清晰地理解这些框架,我们可以从以下几个方面来分析它们的核心不同点和底层不同点。 1. 框架类型和设计…...
深度学习后门攻击分析与实现(二)
前言 在本系列的第一部分中,我们已经掌握了深度学习中的后门攻击的特点以及基础的攻击方式,现在我们在第二部分中首先来学习深度学习后门攻击在传统网络空间安全中的应用。然后再来分析与实现一些颇具特点的深度学习后门攻击方式。 深度学习与网络空间…...
boost 的lockfree 使用
boost 的lockfree 使用 // test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <mutex> #include <memory> #include <condition_variable> #include <…...
从LDF文件看LIN调度:为什么说‘可预测性’是汽车低端总线的灵魂?
从LDF文件看LIN调度:为什么说‘可预测性’是汽车低端总线的灵魂? 当你按下车窗按钮时,那个瞬间发生的升降动作背后,隐藏着一套精密的通信协议在默默运作。不同于高端车载网络CAN总线的复杂仲裁机制,LIN总线以其独特的&…...
【开题答辩全过程】以 基于Java的影视设备维修评估系统为例,包含答辩的问题和答案
个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...
独角数卡:10分钟开启数字商品自动售卖新时代
独角数卡:10分钟开启数字商品自动售卖新时代 【免费下载链接】dujiaoka 🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉 项目地址: https://gitcode.com/g…...
超图神经网络(HGNN)实战:从多模态数据构建到节点特征提取
超图神经网络实战:多模态数据融合与节点特征提取全流程解析 在电商推荐系统中,我们常常需要同时处理用户行为日志、商品图像和评论文本——这三种异构数据如何统一建模?传统图神经网络(GNN)在处理这类多模态关联时往往…...
回溯法与剪枝优化:高效求解n位逐位整除数的实战解析
1. 什么是n位逐位整除数? n位逐位整除数是一种特殊的数字序列,它满足从最高位开始,前k位组成的数字必须能被k整除(k从1到n)。举个例子,数字102450就是一个6位整除数: 第1位1能被1整除前2位10能被…...
2026最新!AI论文软件测评:这几款让你写作更高效
2026年真正好用的AI论文软件,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...
AtlasOS系统性能优化指南:从诊断到维护的全方位解决方案
AtlasOS系统性能优化指南:从诊断到维护的全方位解决方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atl…...
Claude Code 从入门到实战:高效 AI 编程助手完全指南
Claude Code 是 Anthropic 推出的终端级 AI 编程助手,依托百万级 token 上下文,可深度理解项目、自动编写代码、修复 Bug、集成 Git,大幅提升开发效率。 一、快速上手 1. 安装与启动 支持 macOS/Linux/Windows (WSL),一键安装&…...
别再把FastAPI路由和挂载搞混了!一张图讲清`mount`与子应用的应用场景
FastAPI路由与挂载深度解析:如何为模块化开发选择最佳方案 在构建现代Web应用时,模块化设计已成为提升可维护性和团队协作效率的关键策略。FastAPI作为Python生态中最受欢迎的异步框架之一,提供了两种截然不同的模块化方案:APIRo…...
3步让老Mac焕发新生:OpenCore Legacy Patcher完整重生方案
3步让老Mac焕发新生:OpenCore Legacy Patcher完整重生方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当你心爱的Mac电脑被苹果官方宣布"过时"&…...
