每日一题: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…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
