每日一题:LeetCode-589.N叉树的前序遍历
每日一题系列(day 01)
前言:
🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉算法👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长的道路🏇🏇,我们要做的,就是斩妖除魔💥💥,打怪升级!💪💪当然切记不可😈走火入魔😈,每日打怪,日日累积,终能成圣🙏🙏!今天就开启我们的斩妖之旅!✈️✈️
LeetCode-589.N叉树的前序遍历:
题目:
给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
示例1:

示例2:

注意事项:
- 节点总数在范围 [0, 104]内
- 0 <= Node.val <= 104
- n 叉树的高度小于或等于 1000
解法一:
思路:
首先开辟一个数组,用来存放N叉树前序遍历的结果,先将根节点压入数组,然后进行范围for(顺序遍历二叉树的每一个节点),将前序遍历的结果放入到tmp数组中,再使用范围for将tmp数组的值拷贝回原数组。最后返回原数组的值即可。
但是这样写的效率非常低,将ans数组拷贝到tmp数组,再将tmp数组拷贝回原数组,这样来来回回的拷贝效率实在是很低,所以我们可以考虑用封装来优化。
代码实现:
/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {
public:vector<int> preorder(Node* root) {if(root == NULL) return vector<int>{};vector<int> ans;//开辟一个数组用来记录前序遍历结果ans.push_back(root -> val);//将前序遍历到的每个节点的值压入到数组中for(auto x : root -> children)//范围for依次遍历N叉树的每个节点{vector<int> tmp = preorder(x);//用tmp数组接收前序遍历的结果for(auto y : tmp) ans.push_back(y);//拷贝完成之后再将tmp数组元素拷贝回原数组}return ans;//返回前序遍历数组的结果即可}
};
解法二:
思路:
以上是不使用封装解决前序遍历问题的方法,没有什么问题是一层封装解决不了的,如果有,那就两层。
1、我们在preorder函数中定义一个数组ans用来记录前序遍历结果,封装一个前序遍历的函数,将根节点和数组传ans入函数,其中数组传参是用引用传参(避免多一次拷贝)最后返回数组即可。
2、在函数内部,我们首先将遍历到的每个节点的值压入到数组ans当中,再使用范围for对N叉树的每个子孩子遍历,并且将前序遍历到的节点全部拷贝到ans数组中。
时间复杂度:O(N),其中 n 为 N 叉树的节点。每个节点恰好被遍历一次。
空间复杂度:O(N),递归过程中需要调用栈的开销,平均情况下为 O(logN),最坏情况下树的深度为 N−1,此时需要的空间复杂度为 O(N)。
代码实现:
/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {
public:void _preorder(Node *root, vector<int> &ans)//引用传参,少一次拷贝构造{if(root == NULL) return;ans.push_back(root -> val);//将前序遍历的节点值压入数组中for(auto x : root -> children)//范围for便利{_preorder(x, ans);//将前序遍历结果也压入到ans数组中}return;}vector<int> preorder(Node* root) {vector<int> ans;//记录前序遍历的结果_preorder(root, ans);//进行前序遍历return ans;//返回前序遍历的数组}
};
今天第一次写的题也是比较简单的,主要是对数组拷贝的优化,将多次拷贝优化为在一个数组内操作。
相关文章:
每日一题:LeetCode-589.N叉树的前序遍历
每日一题系列(day 01) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🔎…...
PTA 7-2 简单计算器
7-2 简单计算器 分数 20 全屏浏览题目 作者 张彤彧 单位 浙江大学 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运…...
9、鸿蒙应用桌面图标外观和国际化
一、项目资源目录 项目下的resoueces目录为资源配置目录,其中base为基础配置,即在任何语言环境下都会加载的资源, color.json:用于配置颜色,如页面的背景和文字的颜色。 string.json:用于设置文字&#…...
oracle rac 19c修改不同网段public ip
客户需求将才搭建的oracle 19.19数据库从192.168.168.0网段调整到192.168.213网段 1.停止两个节点集群 停止之前最好ocrdump一下,防止有问题 crsctl stop crs 2.修改public ip地址和/etc/hosts 3. 启动crs 这时集群可以启动,但是上面的一些资源启动会…...
【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解
本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…...
OpenAI宣布暂停ChatGPT plus用户订阅,解决方案,无需等待立马升级
作为人工智能领域的一项重要革新,ChatGPT Plus的上线引起了众多用户的关注,其背后的OpenAI表现出傲娇的态度,被誉为下一个GTP 4.0。总的来说,ChatGPT Plus的火爆主要有两个原因。首先,其在人工智能对话技术领域的创新&…...
如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中
文章目录 第一步:准备 CentOS 服务器第二步:安装 Node.js 和 Docsify第三步:初始化 Docsify 项目第四步:本地预览 Docsify 项目第五步:配置 Nginx 服务器第六步:重启 Nginx 服务器拓展:使用 HTT…...
小程序存在优惠卷遍历,但是歪了
进入小程序,因为是一个小商城,所以照例先查看收货地址是否存在越权,以及能否未授权访问,但是发现不存在这些问题,所以去查看优惠卷 进入领券中心,点击领取优惠券时抓包 发现数据包,存在敏感参数…...
HarmonyOS第一课-对比Kotlin,快速入门TypeScript
编程语言简介 基础类型 1. 布尔值 TypeScript 和 Kotlin: 两者都有 boolean 类型,用于表示 true 或 false。 ts示例: let isDone:boolean falsekotlin示例: val isDone: Boolean false2. 数字 TypeScript: 有 number 类型,…...
【自动驾驶】一些业内自动驾驶专业术语释义
Trajectory 轨迹信息,一般都会发布未来5-10秒的trajactory信息。 Trajectory flicker 轨迹抖动 Nudge 道内避障。在维持车道不变的情况下,横向偏离车道中心以绕开obstacle/agent。 Xlane Nudge 借道避障。借用对向车道或自行车道以绕开obstacle/a…...
好用的博客评论系统 Valine 使用及避坑指南
评论系统,即网站的一个小功能,展示评论内容和用户输入框。开源免费的评论系统可不多,原来很火的"多说"评论系统都关闭了,而Disqus又是国外的访问受限。无意间发现了Valine,挺不错的,分享给大家。…...
【Mysql】[Err] 1293 - Incorrect table definition;
基本情况 SQL文件描述 /* Navicat MySQL Data TransferSource Server : cm4生产-200 Source Server Version : 50725 Source Host : 192.168.1.200:3306 Source Database : db_wmsTarget Server Type : MYSQL Target Server Version : 50725 File…...
SpringBoot——日志及原理
优质博文:IT-BLOG-CN 一、SpringBoot日志 选用 SLF4j(接口)和 logback(实现类),除了上述日志框架,市场上还存在 JUL(java.util.logging)、JCL(Apache Commons Logging)、Log4j、Log4j2、SLF4j…...
7种SQL的进阶用法
1.自定义排序(ORDER BY FIELD) 在MySQL中ORDER BY排序除了可以用ASC和DESC之外,还可以使用自定义排序方式来实现。 CREATE TABLE movies ( id INT PRIMARY KEY AUTO_INCREMENT, movie_name VARCHAR(255), actors VARCHAR(255), price DEC…...
Unity--互动组件(Scrollbar)||Unity--互动组件(DropDown )
此组件中的,交互,过渡,导航与文章(Unity--互动组件(Button))中的介绍如同; handle rect:(父节点矩形) 用于控件的滑动“句柄”部分的图形…...
Unity、UE和Godot的优劣对比
先占位。。。。。。 首先说Unity和UE这两家公司,是行业的两座灯塔,对整个游戏引擎的这个行业的发展具有这种指导性的这种作作用。这两个引擎我从2016年开始就一直在用,结合一下业内的共识,一般来说认为呢,Unity更擅长移…...
CMAK Kafka可视化管理工具
CMAK简介 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 CMAK(原名Kafka Manager)。 这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况。 它支持管理多个集…...
PHP如何持续监听Redis的消息订阅并推送到前端?
PHP如何持续监听Redis的消息订阅并推送到前端? 概述: 在许多Web应用程序中,实时推送消息是很常见的需求。当我们需要向前端实时发送消息时,往往会使用轮询或长轮询的方式去获取最新数据。但这种方式对服务器资源的消耗较大,同时响…...
php项目从宝塔面板切换转到phpstudy小皮面板
宝塔面板转phpstudy面板 版本 宝塔面板8.0.1 phpstudy面板8.1.1.3 步骤 1、宝塔面板,找到项目文件夹,打包、下载到本地、解压 2、本地windows系统安装phpstudy面板,选择尽可能一样的配置 比如宝塔php7.4.33,可能phpstudy面板只有php7.4.3,也行 大环境一定要一致,比如…...
基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例)
基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例) 工程: Keil工程资源 参考资料: A121 datasheet 1.3 A121 HAL Software Integration User Guide A121 STM32CubeIDE User Guide 官方参考示例工程&a…...
SkyBridge:构建AI模型统一接入层,实现多模型智能路由与生产级运维
1. 项目概述:当AI模型需要“搭桥”时,我们做了什么最近在折腾大模型应用落地的朋友,估计都绕不开一个核心痛点:模型能力很强,但怎么把它稳定、高效、低成本地集成到自己的业务流里,是个大问题。尤其是在面对…...
时间依赖几何DeepONet:高效解决时空动力学系统算子学习难题
1. 项目背景与核心价值在科学计算和工程仿真领域,传统数值方法在处理复杂时空演化问题时常常面临计算成本高、泛化能力弱的瓶颈。我们团队开发的"时间依赖几何DeepONet"架构,正是针对这类时空动力学系统的算子学习难题提出的创新解决方案。这个…...
Vibe Project:为AI Agent设计的开发环境模板,提升人机协作效率
1. 项目概述:Vibe Project,一个为AI时代重构的开发起点如果你和我一样,在过去一年里深度使用了Claude Code、Cursor或者GitHub Copilot,那你一定经历过这种“冰火两重天”的体验:一方面,AI助手确实能帮你快…...
从iCloud到Exporter:一份给Mac用户的苹果备忘录迁移与备份全攻略
从iCloud到Exporter:Mac用户的苹果备忘录迁移与备份全攻略 苹果备忘录作为生态内轻量级笔记工具,其优雅的界面设计和无缝同步体验让许多用户爱不释手。但当面临设备更换、数据归档或工作流整合时,如何将这些碎片化知识安全迁移却成了令人头疼…...
终极性能对决:ASP.NET Boilerplate 数据访问层 EF Core vs Dapper vs ADO.NET 谁更快?
终极性能对决:ASP.NET Boilerplate 数据访问层 EF Core vs Dapper vs ADO.NET 谁更快? 【免费下载链接】aspnetboilerplate ASP.NET Boilerplate - Web Application Framework 项目地址: https://gitcode.com/gh_mirrors/as/aspnetboilerplate AS…...
终极C语言极简编译器调试指南:c4项目GDB配置与实战技巧
终极C语言极简编译器调试指南:c4项目GDB配置与实战技巧 【免费下载链接】c4 C in four functions 项目地址: https://gitcode.com/gh_mirrors/c4/c4 C语言极简编译器c4(C in four functions)是一个令人惊叹的开源项目,它通…...
NetworkX地理空间网络分析终极指南:从道路网络到位置数据的完整可视化教程
NetworkX地理空间网络分析终极指南:从道路网络到位置数据的完整可视化教程 【免费下载链接】networkx Network Analysis in Python 项目地址: https://gitcode.com/gh_mirrors/ne/networkx NetworkX是Python中最强大的网络分析库之一,它提供了简单…...
论文AIGC检测多少才合格?怎么降低论文的aigc率?
论文AI率刚降下去,重复率升上来了?重复率降下去,疑似度又飙升?给我3分钟,手把手教你轻松去除AI痕迹和重复率,顺利通过检测!都是2026年5月亲测可用的技巧和工具,新鲜出炉!…...
猫抓浏览器资源嗅探工具:5分钟快速掌握网页内容下载终极指南
猫抓浏览器资源嗅探工具:5分钟快速掌握网页内容下载终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容无处不在的今天…...
Prompt4ReasoningPapers:大模型推理增强技术知识图谱与实战指南
1. 项目概述与核心价值如果你正在研究大语言模型的推理能力,或者想快速了解如何通过提示工程让模型“学会思考”,那么你大概率已经听说过“思维链”或者“提示工程”这些概念。但面对海量的论文,从哪篇开始看?最新的进展是什么&am…...
