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

LeetCode 0590. N 叉树的后序遍历:深度优先搜索(DFS)

【LetMeFly】590.N 叉树的后序遍历:深度优先搜索(DFS)

力扣题目链接:https://leetcode.cn/problems/n-ary-tree-postorder-traversal/

给定一个 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)

类似于N叉树的前序遍历,像正常的深度优先搜索一样,写一个函数来实现递归操作。这个函数接受一个节点作为参数:

首先依次递归遍历每一个子节点,接着将这个节点的值加入答案数组中。

从根节点开始调用这个函数后,最终返回答案数组即可。

  • 时间复杂度 O ( N ) O(N) O(N),其中 N N N是节点个数
  • 空间复杂度 O ( N ) O(N) O(N)

AC代码

C++
class Solution {
private:vector<int> ans;void dfs(Node* root) {for (Node* nextNode : root->children) {dfs(nextNode);}ans.push_back(root->val);}
public:vector<int> postorder(Node* root) {if (root) {dfs(root);}return ans;}
};
Python
# from typing import List, Optional# # Definition for a Node.
# class Node:
#     def __init__(self, val=None, children=None):
#         self.val = val
#         self.children = childrenclass Solution:def dfs(self, root: 'Node') -> None:for nextNode in root.children:self.dfs(nextNode)self.ans.append(root.val)def postorder(self, root: Optional['Node']) -> List[int]:self.ans = []if root:self.dfs(root)return self.ans

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136167758

相关文章:

  • 课后延时服务选课报名管理系统功能清单
  • RESTful 风格是指什么
  • 1027. 最长等差数列【leetcode】/动态规划
  • 【嵌入式】CAN总线
  • 数据库管理-第151期 Oracle Vector DB AI-03(20240218)
  • 【算法】树状数组
  • 突破编程_C++_面试(变量与常量)
  • WireShark 安装指南:详细安装步骤和使用技巧
  • 算法练习-01背包问题【含递推公式推导】(思路+流程图+代码)
  • 沁恒CH32V30X学习笔记11---使用外部时钟模式2采集脉冲计数
  • PAM | 账户安全 | 管理
  • 适用于Android 的 7 大短信恢复应用程序
  • 机器学习入门--门控循环单元(GRU)原理与实践
  • Linux系统之部署网页小游戏合集网站
  • nginx 日志改为json格式
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • JavaScript-如何实现克隆(clone)函数
  • 【css3】浏览器内核及其兼容性
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 【知识碎片】第三方登录弹窗效果
  • Android Volley源码解析
  • classpath对获取配置文件的影响
  • Flannel解读
  • maven工程打包jar以及java jar命令的classpath使用
  • mysql 数据库四种事务隔离级别
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • npx命令介绍
  • vue的全局变量和全局拦截请求器
  • Web设计流程优化:网页效果图设计新思路
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 力扣(LeetCode)56
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 入口文件开始,分析Vue源码实现
  • 微信小程序开发问题汇总
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 《天龙八部3D》Unity技术方案揭秘
  • 昨天1024程序员节,我故意写了个死循环~
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​香农与信息论三大定律
  • #include<初见C语言之指针(5)>
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (4)(4.6) Triducer
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (LeetCode) T14. Longest Common Prefix
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (转)linux 命令大全
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET正则基础之——正则委托
  • [android] 练习PopupWindow实现对话框
  • [codeforces] 25E Test || hash
  • [CodeForces-759D]Bacterial Melee
  • [Django 0-1] Core.Handlers 模块