【LeetCode: 590. N 叉树的后序遍历 + DFS】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ DFS
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 590. N 叉树的后序遍历

⛲ 题目描述

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

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

示例 1:
在这里插入图片描述

输入:root = [1,null,3,2,4,null,5,6]
输出:[5,6,3,2,4,1]
示例 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]
输出:[2,6,14,11,7,3,12,8,4,13,9,10,5,1]

提示:

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

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

🌟 求解思路&实现代码&运行结果


⚡ DFS

🥦 求解思路
  1. 该题目是二叉树后序遍历的变种,该题目是多叉树,多加一个迭代的过程即可。
  2. 有了基本的思路,接下来我们就来通过代码来实现一下递归和迭代的解法。
🥦 实现代码
/*
// 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 {private List<Integer> list = new ArrayList<>();public List<Integer> postorder(Node root) {dfs(root);return list;}public void dfs(Node root) {if (root == null)return;for (Node node : root.children) {dfs(node);}list.add(root.val);}
}// 迭代:通过栈来模拟先进后出的特性
/*
// 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 {private List<Integer> list = new ArrayList<>();public List<Integer> postorder(Node root) {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 = 0; i <= node.children.size() - 1; i++) {stack.push(node.children.get(i));}}Collections.reverse(res);return res;}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

C#使用 AutoUpdater.NET 实现程序自动更新

写在前面 开发桌面应用程序的时候&#xff0c;经常会因为新增功能需求或修复已知问题&#xff0c;要求客户更新应用程序&#xff0c;为了更好的服务客户&#xff0c;通常会在程序启动时判断版本变更情况&#xff0c;如发现新版本则自动弹出更新对话框&#xff0c;提醒客户更新…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(四)之Helm及cert-manager安装

安装Helm(三台都安装) 下载helm安装包并加入执行目录 tar zxf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/bin/ helm version添加rancher稳定版仓库(三台都安装) helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/serve…

c#程序应用程序设置文件Settings.settings详解

https://blog.csdn.net/wqq1027/article/details/84873014 应用程序设置 应用程序设置使您能够动态存储和检索应用程序的属性设置和其他信息。 还使您能够维护客户端计算机上的自定义应用程序和用户首选项。 通常这些数据&#xff08;如连接字符串&#xff09;对于运行应用程序…

RichAF 中文版(下)

原文&#xff1a;Rich AF : The Winning Money Mindset That Will Change Your Life 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 五、我出生时不是富人&#xff0c;但我的孩子会是 投资部分 当涉及投资时&#xff0c;我有三个关于致富的真相要分享&#xff1a; …

mysql同类型的多行变成一行value1和value2不同的列

关键字 row_number() over (partition by) 例如&#xff0c;下面的数据&#xff0c; 这是按照name分组后&#xff0c;展示property值。 我们想得到这样的值; 第一步&#xff1a;将每一组的property标上序号 select name,property,row_number() over (partition by name order…

CSS实现两栏布局,左侧固定宽高,右侧超高滚动加载

要实现左侧子元素高度固定&#xff0c;右侧子元素超高滚动加载&#xff0c;并且左侧子元素与父级元素高度一致且不跟随滚动&#xff0c;可以使用CSS的flex布局和overflow属性来实现。 首先&#xff0c;将父级元素设置为flex布局&#xff0c;并将其分为左右两个子元素。左侧子元…

hpp文件:C++开发中的利器

1 什么是hpp文件&#xff1f; hpp文件是C程序中一种特殊头文件&#xff0c;它可以包含类的声明和实现。与传统的h文件相比&#xff0c;hpp文件具有以下特点&#xff1a; 将类的声明和实现放在同一个文件里&#xff0c;减少了代码量&#xff0c;提高了代码的可读性。无需再将c…

Django学习笔记-创建第一个django项目

1.创建一个虚拟环境的python项目 2.点击解释器设置 3.安装django包 4.终端选择Command Prompt 5.创建django项目运行django-admin startproject demo01(自命名) 6.修改连接数据库为mysql 7.修改语言(中国汉语)和时区(亚洲上海)USE_TZ改为False,否则时区不生效 8.修改TEMPLA…

并发List、Set、ConcurrentHashMap底层原理

并发List、Set、ConcurrentHashMap底层原理 ArrayList: List特点&#xff1a;元素有放入顺序&#xff0c;元素可重复 存储结构&#xff1a;底层采用数组来实现 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Clon…

基于Java的车辆租赁管理平台/租车系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Springboot框架进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、车辆详情、车辆预订、用户中心模块。后台功能包括&#xff1a;车辆管理、分类管理…

从入门到精通:AI绘画与修图实战指南

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在这篇文章中&#xff0c;我们将深入探讨如何利…

android通过广播打印ram使用信息

在内存非常吃紧的情况下&#xff0c;android设备会开始kill部分非系统进程甚至系统进程来保证基本的系统运行。在这种情况下如何获取设备过去某段时间的ram使用情况至关重要。 通过开发者模式中的“内存”可以完美得知设备内存使用信息。 我们可以通过此途径&#xff0c;设计一…

【鸿蒙系统学习笔记】ArkTS开发语言

一、背景 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 二、基本语法 2.1、基本语法介绍 ArkTS的基本组成&#xff0c;资料来自…

地下管线管网三维建模工具MagicPipe3D V3.4.2发布

经纬管网建模系统MagicPipe3D&#xff0c;本地离线参数化构建地下管网三维模型&#xff08;包括管道、接头、附属设施等&#xff09;&#xff0c;输出标准3DTiles服务、Obj模型等格式&#xff0c;支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

Python假数据生成库之mimesis使用详解

概要 在软件开发和测试过程中,经常需要使用假数据来模拟真实环境,进行测试、演示或者填充数据库。Python Mimesis 库就是一个强大的工具,可以帮助快速、方便地生成各种类型的假数据。本文将深入探讨 Mimesis 库的功能、用法和示例代码,以帮助大家更好地了解如何利用这个库…

SQL查询转化为 Elasticsearch 查询

使用SQL 转化为查询 Elasticsearch 支持 sql 语句转化为 elasticsearch 的 查询语句 第一步&#xff1a; 打开在线转换工具的网页&#xff0c;进入工具页面 第二步&#xff1a;在指定的输入框中输入需要转换的 sql 语句。 您学会了这么简单的办法

虚拟机--pc端和macOS端互通

windows开启虚拟化 要在Windows系统中开启虚拟化&#xff0c;您可以按照以下步骤操作&#xff1a; 准备工作&#xff1a; 确保您的计算机CPU支持虚拟化技术。在BIOS中开启相应的虚拟化支持。 开启虚拟化&#xff1a; 打开控制面板&#xff0c;点击程序或功能项&am…

VSCode使用Remote-SSH连接服务器时报错:启动服务器失败问题

VSCode使用Remote-SSH连接服务器时报错&#xff1a;启动服务器失败问题 问题描述解决方法引用 问题描述 第一天上班&#xff0c;回来发现又不能使用VScode连不上服务器了&#xff0c;在「输出」栏出现了一直报 Waiting for server log… 的情况&#xff01;本来以为是普通的连接…

Java多线程系列——同步关键字

目录 一、线程安全和数据不一致性 二、synchronized关键字的作用 三、synchronized工作原理 四、锁的级别 五、synchronized的优点与缺点 六、实战应用 七、总结 在Java中&#xff0c;synchronized 关键字是并发编程中的一个基本构建块&#xff0c;用于控制多个线程对共…

Spring框架-AOP(面向切面编程)

AOP&#xff0c;面向切面编程&#xff0c;指在不改变源码的情况下&#xff0c;增加方法的功能。 AOP底层使用动态代理&#xff0c;有两种情况的动态代理&#xff1a; 有接口情况下的动态代理&#xff0c;使用的是JDK动态代理&#xff0c;通过创建接口实现类的代理对象来增强类…