【LeetCode-简单题】589. N 叉树的前序遍历

文章目录

    • 题目
    • 方法一:单循环栈做法
    • 方法二:递归

题目

在这里插入图片描述

方法一:单循环栈做法

关键在于子节点的入栈顺序,决定了子节点的出栈顺序,
因为是前序遍历 所以压栈顺序先让右边的入栈 依次往左 这样左边的节点会在栈顶 这样下次优先出栈的是左边的元素 满足前序遍历

 for(int i = root.children.size()-1 ; i>=0 ;i--)stack.push(root.children.get(i));
class Solution {public List<Integer> preorder(Node root) {if(root==null) return new ArrayList<>();List<Integer> res = new ArrayList<>();Deque<Node> stack = new LinkedList<>();stack.push(root);while(!stack.isEmpty()){root  = stack.pop();res.add(root.val);//因为是前序遍历  所以压栈顺序先让右边的入栈  依次往左  这样左边的节点会在栈顶 这样下次优先出栈的是左边的元素 满足前序遍历for(int i = root.children.size()-1 ; i>=0 ;i--)stack.push(root.children.get(i));}return res;}
}

方法二:递归

原理和二叉树的前序遍历一样 相当于把左右孩子 改成孩子集合了 孩子变多了而已,核心还是 根左右(先跟 再左孩子 在右孩子)

class Solution {List<Integer> res = new ArrayList<>();public List<Integer> preorder(Node root) {dfs(root);return res;}public void dfs(Node root){if(root == null) return;res.add(root.val);//前for(Node node : root.children)//中中中中中dfs(node);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全链路压测:优化系统性能的关键措施

在现代互联网时代&#xff0c;系统的性能稳定性和可靠性对于企业的成功至关重要。全链路压测作为一项关键的测试措施&#xff0c;可以模拟真实的负载情况&#xff0c;全面评估系统在高负载环境下的表现。本文将介绍全链路压测的定义、作用以及在优化系统性能方面的重要性。 一、…

MATLAB打开历史命令窗口并保持

版本&#xff1a;matlab 2021a 方法&#xff1a;菜单栏 主页 - 布局 - 命令历史记录 - 停靠

elasticsearch 索引write.lock报错解决 —— 筑梦之路

ES报错&#xff1a; Caused by: org.apache.lucene.store.LockObtainFailedException: Lock held by another xxx write.lock 这是ES异常关闭导致索引的写锁未释放&#xff0c;索引一直处于red状态 解决方法&#xff1a; 1. 停掉ES服务 2. 找到相应的数据目录&#xff0c…

成都直播基地排名,天府蜂巢直播基地获高知名度直播基地称号

成都直播基地的排名在近年来不断攀升&#xff0c;其中成都天府蜂巢直播产业基地凭借其卓越的表现获得了高知名度的直播基地称号。成都天府蜂巢直播产业基地凭借其卓越的发展成就和优质的服务&#xff0c;力争为西部地区打造了一个独具魅力的直播产业基地。 双方携手 提速发展 …

经典算法:最短点对

软件架构师何志丹 说明 旧文新发&#xff0c;改了错别字&#xff0c;死链等。尽量保持“原汁原味”。 难点 如何测试。我的解决方式是&#xff1a;a,三种解法&#xff0c;看结果是否一致。b,小数据&#xff08;100个点&#xff09;&#xff0c;人工排查。第一种方法&#x…

【无标题】C语言学习笔记5--循环结构和选择结构

5.1 运算符和运算符 5.1.1逻辑运算发 运算符说明结核性举例&&与运算&#xff0c;双目&#xff0c;对应数学中的“且”左结合1&&0、(9>3)&&(b>a与运算&#xff0c;双目&#xff0c;对应数学中的“且”左结合1!非运算&#xff0c;单目&#xff0…

MySQL(6)LOCK和MVCC

一、锁的分类 按照锁的属性&#xff1a;读锁、写锁、共享锁、排它锁、悲观锁、乐观锁 按照锁的范围&#xff1a;表锁、页锁、间隙锁、临键锁、行锁 按照锁的作用&#xff1a;意向锁、意向共享锁、意向排它锁、IS锁、IX锁 二、MySQL为什么要有锁 锁是计算机协调多个进程或线程并…

vue-cli2项目运行时中断解决方案记录

目录 前情提要解决方案1. cmd设置【结论&#xff1a;不得行】2. npm cache verify 清除缓存【结论&#xff1a;不得行】3. 删除node_modules&#xff0c;再重新npm i安装【结论&#xff1a;不得行】4. 安装cross-env和increase-memory-limit【结论&#xff1a;不得行】5. 在sci…

Redis的安装与基本使用

文章目录 Linux 环境下安装Redis下载Redis 安装包解压安装包安装Redis进入redis安装包下编译并且安装到指定目录下 启动redis配置远程访问找到Redis.config文件 Windows 环境下安装Redis说明官方提供方式安装或启用WSL2在WSL&#xff08;Ubuntu&#xff09;上安装Redis启动Redi…

26052-2022 硬质合金管状焊条 思维导图

声明 本文是学习GB-T 26052-2022 硬质合金管状焊条. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了硬质合金管状焊条的技术要求、试验方法、检验规则、标志、包装、运输、贮存、随行文 件和订货单内容。 本文件适用于钢件的表…

Hive【Hive(二)DML】

启动 hive 命令行&#xff1a; hive DML 数据操作 1、数据导入 1.1、向表中装载数据&#xff08;load&#xff09; 语法&#xff1a; hive> load data [local] inpath 数据的path [overwrite] into table student [partition (partcol1val1,…)];&#xff08;1&#x…

修炼k8s+flink+hdfs+dlink(一:安装flink)

一&#xff1a;standalone的ha环境部署。 创建目录&#xff0c;上传安装包。 mkdir /opt/app/flink 上传安装包到本目录。 tar -zxvf flink-1.13.6-bin-scala_2.12.tgz配置参数。 在flink-conf.yaml中添加zookeeper配置 jobmanager.rpc.address: node01 high-availability: …

R语言学习笔记

R语言学习笔记 一.准备环境二.认识控制台三.R包四.数据结构1.向量Vector1.1创建向量1.2访问向量中的数据1.3向量的循环补齐 2.矩阵matrix2.1创建矩阵2.2访问矩阵中的数据 3数组Array3.1创建数组3.2访问数组中的数据 4.数据框Dataframe4.1创建数据框4.2访问数据框中的数据 5因子…

函数指针与回调函数

(1) 1分钟学会函数指针与回调函数&#xff08;上&#xff09;_哔哩哔哩_bilibili #include <QCoreApplication> #include <stdio.h>int sum(int x,int y){ return xy; } int difference(int x,int y){ return x-y; } int product(int x,int y){ return x*y; }in…

GitLab多人开发步骤

目录 一、基于develop创建自己的feature分支二、提交代码格式简易版 三、提交到远程仓库四、提交合并请求 一、基于develop创建自己的feature分支 使用git checkout切换到develop分支 git checkout develop 基于develop分支创建feature分支 格式&#xff1a; git checkout -b …

进阶JS-作用域和作用域链

作用域规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a;局部作用域、全局作用域 局部作用域&#xff08;Local&#xff09; 局部作用域分为函数作用域和块作用域。 函数作用域&#xff1a;在函数内部声明的变量只能…

MYSQL操作命令大全

mysql命令大全 命令说明示例mysql -h ip -P port -u user -p password远程连接mysqlmysql -h192.168.0.201 -P3306 -uroot -p123mysql -u user -p password本地连接mysqlmysql -uroot -p123select * from information_schema.TABLES where TABLE_SCHEMA(select database()) 查…

完全指南:mv命令用法、示例和注意事项 | Linux文件移动与重命名

文章目录 mv命令使用指南1. 简介什么是mv命令&#xff1f;mv命令的作用和功能是什么&#xff1f; 2. 基本用法基本语法格式如何移动文件&#xff1f;如何重命名文件&#xff1f;如何移动和重命名目录&#xff1f; 3. 高级用法使用通配符进行批量移动和重命名使用选项进行文件移…

数据库设计步骤

一、数据库设计重点&#xff1a;有效存储、高效访问 1、为什么要进行数据库设计&#xff1a; &#xff08;1&#xff09;减少数据冗余&#xff1b; &#xff08;2&#xff09;避免数据异常维护&#xff1b; &#xff08;3&#xff09;节约存储空间&#xff1b; &#xff08;4&…

【CMU15-445 Part-12】Query Execution I

Part12-Query Execution I Processing Models Processing Model主要指的是明确如何去执行一个查询计划&#xff08;top 2 bottom or bottom 2 top,operator之间的传递&#xff09;。 Iterator Model (volcano model/pipeline model);每个算子实现一个Next( )&#xff0c;父…