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

每日一题: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(log⁡N),最坏情况下树的深度为 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叉树的前序遍历

每日一题系列&#xff08;day 01&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…...

PTA 7-2 简单计算器

7-2 简单计算器 分数 20 全屏浏览题目 作者 张彤彧 单位 浙江大学 模拟简单运算器的工作。假设计算器只能进行加减乘除运算&#xff0c;运算数和结果都是整数&#xff0c;四种运算符的优先级相同&#xff0c;按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运…...

9、鸿蒙应用桌面图标外观和国际化

一、项目资源目录 项目下的resoueces目录为资源配置目录&#xff0c;其中base为基础配置&#xff0c;即在任何语言环境下都会加载的资源&#xff0c; color.json&#xff1a;用于配置颜色&#xff0c;如页面的背景和文字的颜色。 string.json&#xff1a;用于设置文字&#…...

oracle rac 19c修改不同网段public ip

客户需求将才搭建的oracle 19.19数据库从192.168.168.0网段调整到192.168.213网段 1.停止两个节点集群 停止之前最好ocrdump一下&#xff0c;防止有问题 crsctl stop crs 2.修改public ip地址和/etc/hosts 3. 启动crs 这时集群可以启动&#xff0c;但是上面的一些资源启动会…...

【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解

本文从分析现在流行的前后端分离Web应用模式说起&#xff0c;然后介绍如何设计REST API&#xff0c;通过使用Django来实现一个REST API为例&#xff0c;明确后端开发REST API要做的最核心工作&#xff0c;然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…...

OpenAI宣布暂停ChatGPT plus用户订阅,解决方案,无需等待立马升级

作为人工智能领域的一项重要革新&#xff0c;ChatGPT Plus的上线引起了众多用户的关注&#xff0c;其背后的OpenAI表现出傲娇的态度&#xff0c;被誉为下一个GTP 4.0。总的来说&#xff0c;ChatGPT Plus的火爆主要有两个原因。首先&#xff0c;其在人工智能对话技术领域的创新&…...

如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中

文章目录 第一步&#xff1a;准备 CentOS 服务器第二步&#xff1a;安装 Node.js 和 Docsify第三步&#xff1a;初始化 Docsify 项目第四步&#xff1a;本地预览 Docsify 项目第五步&#xff1a;配置 Nginx 服务器第六步&#xff1a;重启 Nginx 服务器拓展&#xff1a;使用 HTT…...

小程序存在优惠卷遍历,但是歪了

进入小程序&#xff0c;因为是一个小商城&#xff0c;所以照例先查看收货地址是否存在越权&#xff0c;以及能否未授权访问&#xff0c;但是发现不存在这些问题&#xff0c;所以去查看优惠卷 进入领券中心&#xff0c;点击领取优惠券时抓包 发现数据包&#xff0c;存在敏感参数…...

HarmonyOS第一课-对比Kotlin,快速入门TypeScript

编程语言简介 基础类型 1. 布尔值 TypeScript 和 Kotlin: 两者都有 boolean 类型&#xff0c;用于表示 true 或 false。 ts示例&#xff1a; let isDone:boolean falsekotlin示例&#xff1a; val isDone: Boolean false2. 数字 TypeScript: 有 number 类型&#xff0c…...

【自动驾驶】一些业内自动驾驶专业术语释义

Trajectory 轨迹信息&#xff0c;一般都会发布未来5-10秒的trajactory信息。 Trajectory flicker 轨迹抖动 Nudge 道内避障。在维持车道不变的情况下&#xff0c;横向偏离车道中心以绕开obstacle/agent。 Xlane Nudge 借道避障。借用对向车道或自行车道以绕开obstacle/a…...

好用的博客评论系统 Valine 使用及避坑指南

评论系统&#xff0c;即网站的一个小功能&#xff0c;展示评论内容和用户输入框。开源免费的评论系统可不多&#xff0c;原来很火的"多说"评论系统都关闭了&#xff0c;而Disqus又是国外的访问受限。无意间发现了Valine&#xff0c;挺不错的&#xff0c;分享给大家。…...

【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——日志及原理

优质博文&#xff1a;IT-BLOG-CN 一、SpringBoot日志 选用 SLF4j&#xff08;接口&#xff09;和 logback&#xff08;实现类&#xff09;&#xff0c;除了上述日志框架&#xff0c;市场上还存在 JUL(java.util.logging)、JCL(Apache Commons Logging)、Log4j、Log4j2、SLF4j…...

7种SQL的进阶用法

1.自定义排序&#xff08;ORDER BY FIELD&#xff09; 在MySQL中ORDER BY排序除了可以用ASC和DESC之外&#xff0c;还可以使用自定义排序方式来实现。 CREATE TABLE movies ( id INT PRIMARY KEY AUTO_INCREMENT, movie_name VARCHAR(255), actors VARCHAR(255), price DEC…...

Unity--互动组件(Scrollbar)||Unity--互动组件(DropDown )

此组件中的&#xff0c;交互&#xff0c;过渡&#xff0c;导航与文章&#xff08;Unity--互动组件&#xff08;Button&#xff09;&#xff09;中的介绍如同&#xff1b; handle rect&#xff1a;&#xff08;父节点矩形&#xff09; 用于控件的滑动“句柄”部分的图形&#xf…...

Unity、UE和Godot的优劣对比

先占位。。。。。。 首先说Unity和UE这两家公司&#xff0c;是行业的两座灯塔&#xff0c;对整个游戏引擎的这个行业的发展具有这种指导性的这种作作用。这两个引擎我从2016年开始就一直在用&#xff0c;结合一下业内的共识&#xff0c;一般来说认为呢&#xff0c;Unity更擅长移…...

CMAK Kafka可视化管理工具

CMAK简介 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 CMAK(原名Kafka Manager)。 这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况。 它支持管理多个集…...

PHP如何持续监听Redis的消息订阅并推送到前端?

PHP如何持续监听Redis的消息订阅并推送到前端&#xff1f; 概述: 在许多Web应用程序中&#xff0c;实时推送消息是很常见的需求。当我们需要向前端实时发送消息时&#xff0c;往往会使用轮询或长轮询的方式去获取最新数据。但这种方式对服务器资源的消耗较大&#xff0c;同时响…...

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移植及测距示例&#xff08;STM32L496为例&#xff09; 工程&#xff1a; Keil工程资源 参考资料&#xff1a; A121 datasheet 1.3 A121 HAL Software Integration User Guide A121 STM32CubeIDE User Guide 官方参考示例工程&a…...

SkyBridge:构建AI模型统一接入层,实现多模型智能路由与生产级运维

1. 项目概述&#xff1a;当AI模型需要“搭桥”时&#xff0c;我们做了什么最近在折腾大模型应用落地的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;模型能力很强&#xff0c;但怎么把它稳定、高效、低成本地集成到自己的业务流里&#xff0c;是个大问题。尤其是在面对…...

时间依赖几何DeepONet:高效解决时空动力学系统算子学习难题

1. 项目背景与核心价值在科学计算和工程仿真领域&#xff0c;传统数值方法在处理复杂时空演化问题时常常面临计算成本高、泛化能力弱的瓶颈。我们团队开发的"时间依赖几何DeepONet"架构&#xff0c;正是针对这类时空动力学系统的算子学习难题提出的创新解决方案。这个…...

Vibe Project:为AI Agent设计的开发环境模板,提升人机协作效率

1. 项目概述&#xff1a;Vibe Project&#xff0c;一个为AI时代重构的开发起点如果你和我一样&#xff0c;在过去一年里深度使用了Claude Code、Cursor或者GitHub Copilot&#xff0c;那你一定经历过这种“冰火两重天”的体验&#xff1a;一方面&#xff0c;AI助手确实能帮你快…...

从iCloud到Exporter:一份给Mac用户的苹果备忘录迁移与备份全攻略

从iCloud到Exporter&#xff1a;Mac用户的苹果备忘录迁移与备份全攻略 苹果备忘录作为生态内轻量级笔记工具&#xff0c;其优雅的界面设计和无缝同步体验让许多用户爱不释手。但当面临设备更换、数据归档或工作流整合时&#xff0c;如何将这些碎片化知识安全迁移却成了令人头疼…...

终极性能对决:ASP.NET Boilerplate 数据访问层 EF Core vs Dapper vs ADO.NET 谁更快?

终极性能对决&#xff1a;ASP.NET Boilerplate 数据访问层 EF Core vs Dapper vs ADO.NET 谁更快&#xff1f; 【免费下载链接】aspnetboilerplate ASP.NET Boilerplate - Web Application Framework 项目地址: https://gitcode.com/gh_mirrors/as/aspnetboilerplate AS…...

终极C语言极简编译器调试指南:c4项目GDB配置与实战技巧

终极C语言极简编译器调试指南&#xff1a;c4项目GDB配置与实战技巧 【免费下载链接】c4 C in four functions 项目地址: https://gitcode.com/gh_mirrors/c4/c4 C语言极简编译器c4&#xff08;C in four functions&#xff09;是一个令人惊叹的开源项目&#xff0c;它通…...

NetworkX地理空间网络分析终极指南:从道路网络到位置数据的完整可视化教程

NetworkX地理空间网络分析终极指南&#xff1a;从道路网络到位置数据的完整可视化教程 【免费下载链接】networkx Network Analysis in Python 项目地址: https://gitcode.com/gh_mirrors/ne/networkx NetworkX是Python中最强大的网络分析库之一&#xff0c;它提供了简单…...

论文AIGC检测多少才合格?怎么降低论文的aigc率?

论文AI率刚降下去&#xff0c;重复率升上来了&#xff1f;重复率降下去&#xff0c;疑似度又飙升&#xff1f;给我3分钟&#xff0c;手把手教你轻松去除AI痕迹和重复率&#xff0c;顺利通过检测&#xff01;都是2026年5月亲测可用的技巧和工具&#xff0c;新鲜出炉&#xff01;…...

猫抓浏览器资源嗅探工具:5分钟快速掌握网页内容下载终极指南

猫抓浏览器资源嗅探工具&#xff1a;5分钟快速掌握网页内容下载终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容无处不在的今天…...

Prompt4ReasoningPapers:大模型推理增强技术知识图谱与实战指南

1. 项目概述与核心价值如果你正在研究大语言模型的推理能力&#xff0c;或者想快速了解如何通过提示工程让模型“学会思考”&#xff0c;那么你大概率已经听说过“思维链”或者“提示工程”这些概念。但面对海量的论文&#xff0c;从哪篇开始看&#xff1f;最新的进展是什么&am…...