LeetCode 589. N 叉树的前序遍历

589. N 叉树的前序遍历

给定一个 n 叉树的根节点  root ,返回 其节点值的 前序遍历 。

n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。


示例 1:

输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]

提示:

  • 节点总数在范围 [0, 10^4]
  • 0 <= Node.val <= 10^4
  • n 叉树的高度小于或等于 1000

进阶:递归法很简单,你可以使用迭代法完成此题吗?

解法思路:

1、递归(Recursion)

2、迭代(Iterator)

法一:

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<Integer> preorder(Node root) {// Recursion// Time: O(n) n 为节点数// Space: O(n)List<Integer> res = new ArrayList<>();helper(root, res);return res;}private void helper(Node root, List<Integer> res) {if (root == null) return;res.add(root.val);for (Node node : root.children) {helper(node, res);}}
}

法二:

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<Integer> preorder(Node root) {// Iterator// Time: O(n) n 为节点数// Space: O(n)List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Map<Node, Integer> map = new HashMap<Node, Integer>();Deque<Node> stack = new ArrayDeque<Node>();Node node = root;while (!stack.isEmpty() || node != null) {while (node != null) {res.add(node.val);stack.push(node);List<Node> children = node.children;if (children != null && children.size() > 0) {map.put(node, 0);node = children.get(0);} else {node = null;}}node = stack.peek();int index = map.getOrDefault(node, -1) + 1;List<Node> children = node.children;if (children != null && children.size() > index) {map.put(node, index);node = children.get(index);} else {stack.pop();map.remove(node);node = null;}}return res;}
}

迭代优化:

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<Integer> preorder(Node root) {// Optimize Iterator// Time: O(n) n 为节点数// Space: O(n)List<Integer> res = new ArrayList<>();if (root == null) {return res;}Deque<Node> stack = new ArrayDeque<Node>();stack.push(root);while (!stack.isEmpty()) {Node node = stack.pop();res.add(node.val);for (int i = node.children.size() - 1; i >= 0; --i) {stack.push(node.children.get(i));}}return res;}
}

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

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

相关文章

训练AI模型:寻找最优参数a和b

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

pygame.error: video system not initialized

错误处理方式&#xff1a; pygame.init() 增加此行

Python中的@property

在 Python 中&#xff0c;property 是一种装饰器&#xff0c;用于将一个方法转换成只读属性。通过使用 property 装饰器&#xff0c;你可以定义一个类的方法&#xff0c;使其在访问时可以像访问属性一样&#xff0c;而不是通过方法调用。 下面是一个简单的例子来说明 property …

基于Java SSM框架实现企业车辆管理系统项目【项目源码】

基于java的SSM框架实现企业车辆管理系统演示 JSP技术 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了运动员的需求…

python requests 库上传多文件

在Python的Requests库中&#xff0c;上传多个文件的方法非常简单。你可以使用files参数来上传多个文件&#xff0c;files参 import requestsurl http://httpbin.org/post file_list [(file1, (filename1.png, open(filepath1.png, rb), image/png)),(file2, (filename2.png,…

centos下系统全局检测工具dstat使用

目录 一&#xff1a;没有需要安装 二&#xff1a;dstat命令参数 三、监测界面各参数含义&#xff08;部分&#xff09; 四、dstat的高级用法 一&#xff1a;没有需要安装 yum install dstat 二&#xff1a;dstat命令参数 有默认选项&#xff0c;执行dstat命令不加任何参数…

编程探秘:Python深渊之旅-----机器学习入门(七)

团队决定在他们的项目中加入一些机器学习功能。瑞宝&#xff0c;对新技术充满好奇&#xff0c;跃跃欲试地想了解更多。 瑞宝&#xff08;兴奋地&#xff09;&#xff1a;我一直想学习机器学习&#xff0c;现在终于有机会了&#xff01; 龙&#xff08;微笑着&#xff09;&…

metartc5_jz源码阅读-yang_encode_rtpExtensions

//定义metartc的rtp扩展&#xff0c;标准的webrtc不定义任何头扩展&#xff0c;这个由开发者自定义。 int32_t yang_encode_rtpExtensions(YangRtpExtensions* ext,YangBuffer* buf){int32_t err Yang_Ok;//写两个字节0xBEDE&#xff0c;扩展头标识&#xff0c;开发者自己定义…

街机模拟游戏逆向工程(HACKROM)教程:[0]工具

街机hack&#xff0c;从早期的街霸-降龙版 到后期对各种街机的各种改动版本 这些成果&#xff0c;就是对街机游戏的代码进行逆向分析的结果。对于大部份街机游戏&#xff0c;是基于摩托罗拉68000的CPU&#xff0c;使用的是一套特别的汇编指令集。 一、MAME下载 我们想要对游戏…

cn.hutool.http.HttpUtil类get方法不支持获取重定向地址(避坑)

问题 工作中场景需要通过获取url地址内容&#xff0c;展示返回给客户端&#xff0c;但上线后发现不满足需求&#xff0c;原因是url地址进行302重定向&#xff0c; 进一步了解是因为HttpUtil.get方法不能获取重定向地址&#xff0c;需要使用HttpUtil.createGet()来设置打开重定&…

宝塔面板安装MySQL8数据库

第一步&#xff1a;搜索mysql 第二步: 点击安装 我这里选择安装8版本 第三步&#xff1a;给宝塔配置mysql防火墙 第四步&#xff1a;修改数据库密码 第五步&#xff1a;想要使用navicat连接 需要修改root的权限 &#xff08;1&#xff09;使用secureCRT先登录mysql (2) 输入u…

Java函数式编程

0.Java函数式编程 使用函数式接口、Lambda表达式、Stream API、方法引用编写的代码即为函数式编程 1.函数式接口 只包含一个抽象方法可以有默认方法可以有静态方法 函数式接口&#xff08;Functional Interface&#xff09;是指仅包含一个抽象方法的接口。函数式接口是Java中…

【用法总结】无障碍AccessibilityService

一、背景 本文仅用于做学习总结&#xff0c;转换成自己的理解&#xff0c;方便需要时快速查阅&#xff0c;深入研究可以去官网了解更多&#xff1a;官网链接点这里 之前对接AI语音功能时&#xff0c;发现有些按钮&#xff08;或文本&#xff09;在我没有主动注册唤醒词场景…

Minio安装及整合SpringBoot

一. MinIO概述 官网地址&#xff1a;https://minio.org.cn MinIO是一款基于Apache License v2.0开源协议的分布式文件系统&#xff08;或者叫对象存储服务&#xff09;&#xff0c;可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现&#xff0c;服…

细说JavaScript语句详解

一、顺序结构 二、表达式语句 三、声明语句 四、条件语句 1、if语句 2、if…else语句 3、else if语句 4、switch语句 五、循环语句 1、while循环 2、do… while循环 3、for循环 4、for…in循环 六、跳出语句 1、label语句 2、break语句 3、continue语句

Day26 669修剪二叉搜索树 108有序数组转为二叉搜索树 538二叉搜索树转换为累加树

669 修剪二叉搜索树 给定一个二叉搜索树&#xff0c;同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[L, R]中 (R>L) 。你可能需要改变树的根节点&#xff0c;所以结果应当返回修剪好的二叉搜索树的新的根节点。 class Solution { pub…

对闭包的理解

概念&#xff1a; 一个函数对周围状态的引用捆绑在一起&#xff0c;闭包让开发者可以从内部函数访问外部 函数的作用域 简单理解&#xff1a;闭包 内层函数 外层函数的变量 一个函数对周围状态的引用捆绑在一起&#xff0c;闭包让开发者可以从内部函数访问外部 函数的作…

数据结构——顺序二叉树——堆

1.树的相关概念 在介绍二叉树之前&#xff0c;我们首先要明确树是什么。 树用我们的通常认识来判断应该是一种植物&#xff0c;从根向上生长&#xff0c;分出许多的树枝并长出叶子。对于数据结构中的树而言&#xff0c;其结构也正是从树的特征中剥离出来的。树结构是一种非线性…

第二百六十六回

文章目录 1. 概念介绍2. 分析与解决2.1 分析问题2.2 解决方案 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何修改CircleAvatar的大小"相关的内容&#xff0c;本章回中将介绍如何修改StatusBar中文字的颜色.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

Mongodb的危险操作delete

前言 经常听到各种有趣的新闻&#xff0c;程序员对老板不满&#xff0c;一怒之下删库跑路。或某大厂误操作&#xff0c;把关键数据表删除导致业务停滞几个小时。删库和删表&#xff0c;都是很危险的操作&#xff0c;执行前需要谨慎。否则&#xff0c;轻则需要数据恢复&#xf…