【刷题日记】590. N 叉树的后序遍历

简介: 本次刷题日记的第 5 篇,力扣题为:【刷题日记】590. N 叉树的后序遍历 ,简单

【刷题日记】590. N 叉树的后序遍历

本次刷题日记的第 5 篇,力扣题为:【刷题日记】590. N 叉树的后序遍历简单

一、题目描述:

image.png

乍一看到这个题,有没有感觉很熟悉,仿佛就在上一篇文章中做过

xdm ,你的感觉没错,这个题内容就是和上一题一毛一样,只不过是把之前多叉树的前序遍历,在此处换成了多叉树的后序遍历

对于上一篇,看明白的朋友们,相信做这道遍历后序的题(【刷题日记】589. N 叉树的前序遍历),绝对难不倒你,相信不


二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

之前有分享过什么是二叉树 / 多叉树的 前序遍历,中序遍历,后序遍历,二叉树的后序遍历就是先遍历左子树,再遍历右子树,最后遍历根

对于多叉树来说就是,先遍历多叉树的孩子节点,再遍历根节点

那么对于今天的多叉树的后序遍历来说,我们也可以用示例推演一下,一起走过一遍,这种对于树的递归遍历,都是大同小异了

我们仍然还是用题中的实例作为推演,

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

image.png

相信上图的演示能够让你看明白,每一个节点是如何加入到结果集的,多叉树的后序遍历,按照左右根的方式来进行递归遍历,你也可以很快很轻松的完成

2、尝试编码

根据上述的推演和分析,我们只需要一棵子树一棵子树的去按照 左右根 的方式进行遍历即可

func postorder(root *Node) (ans []int) {
    var dfs func(*Node)
    dfs = func(node *Node) {
        if node == nil {
            return
        }
        // 先遍历孩子节点
        for _, ch := range node.Children {
            dfs(ch)
        }
        // 再把根节点加入到结果集中
        ans = append(ans, node.Val)
    }
    dfs(root)
    return
}

看了上述编码,有没有发现和前序遍历就是部分代码顺序的调整?实际上也确实是这样的,如果还有没有明白的地方,可以多多推演几次就能明白了

四、总结:

上述做法和多叉树的前序遍历做法基本一致,so , 对于时间复杂度和空间复杂度也是一样的

时间复杂度是 O(m) , 这个 m 表示的是 多叉树的节点个数

空间复杂度是 O(m)

原题地址:590. N 叉树的后序遍历

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~


相关文章
|
存储 安全 Shell
【Shell 命令集合 系统管理 】Linux 更改用户的GECOS字段 chfn命令 使用指南
【Shell 命令集合 系统管理 】Linux 更改用户的GECOS字段 chfn命令 使用指南
154 0
|
Java Spring
springboot的自动配置原理
springboot的自动配置原理
|
Java 数据库连接 Spring
JavaWeb优雅实现接口参数校验
JavaWeb优雅实现接口参数校验
248 0
|
6月前
|
存储 人工智能 云栖大会
【云栖大会】阿里云设计中心 × 教育部协同育人项目成果展,PAI ArtLab助力高校AIGC教育新路径
【云栖大会】阿里云设计中心 × 教育部协同育人项目成果展,PAI ArtLab助力高校AIGC教育新路径
|
12月前
|
人工智能 资源调度 机器人
揭秘重磅嘉宾!2024云栖大会看什么
2024云栖大会来了! 将于9月19日至9月21日 在杭州云栖小镇召开 汇集全球最新云计算、AI硬科技
444 8
揭秘重磅嘉宾!2024云栖大会看什么
|
机器学习/深度学习 自然语言处理
机器翻译(Machine Translation, MT)
机器翻译(Machine Translation, MT)
315 1
|
11月前
|
安全 网络安全 Android开发
探索安卓与iOS的安全性差异:一场永无止境的较量
在移动操作系统的浩瀚星海中,安卓与iOS如同双子星般璀璨夺目,各自引领着一方天地。它们不仅在用户界面设计、应用生态和设备兼容性上各有千秋,更在安全性这一核心领域展开了激烈的较量。本文旨在深入剖析安卓与iOS在安全性方面的显著差异,通过对比分析,揭示两者在隐私保护、系统更新、权限管理以及恶意软件防御等方面的不同策略与实践。同时,我们也将展望未来,探讨这两大操作系统在安全性上的发展趋势,以及它们如何应对日益严峻的网络安全挑战。
184 7
|
Kubernetes 网络协议 druid
一文详解长连接黑洞重现和分析
本文先通过重现在不同业务线反复出现的问题,详细描述了从业务、数据库、OS等不同的角度来分析如何解决它。
|
存储 算法 安全
用C++打造极致高效的框架:技术探索与实践
本文探讨了如何使用C++构建高性能框架。C++凭借其高性能、灵活性和跨平台性成为框架开发的理想选择。关键技术和实践包括:内存管理优化(如智能指针和自定义内存池)、并发编程(利用C++的并发工具)、模板与泛型编程以提高代码复用性,以及性能分析和优化。在实践中,应注意代码简洁性、遵循最佳实践、错误处理和充分测试。随着技术发展,不断提升对框架性能的要求,持续学习是提升C++框架开发能力的关键。
235 1
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示
循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示