【刷题日记】589. N 叉树的前序遍历

简介: 本次刷题日记的第 4 篇,力扣题为:589. N 叉树的前序遍历 ,简单

【刷题日记】589. N 叉树的前序遍历

本次刷题日记的第 4 篇,力扣题为:589. N 叉树的前序遍历简单

一、题目描述:

image.png

乍一看,好像比我们之前做过的二叉树会难一点?其实并不是,万变不离其宗,解决方式都是一样的,那么我们一起来瞅一眼

二、思路分析:

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

我们在大学的时候有学习过,二叉树的前中后序遍历,如何分辨是前序,中序,后序?

简单的来说就是根在哪里,就是什么序,例如:

前序就是,根左右 , 先遍历树的根,再遍历左子树,最后遍历右子树

中序就是,左根右,先遍历树的左子树,再遍历根,最后遍历右子树

后序就是,左右根,先遍历树的左子树,再遍历右子树,最后遍历根


根据题目我们可以知道本次是多叉树,但是思路和二叉树是一样的,我们可以一起来看看

推演一下:

以案例中的示例一为例子

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

image.png

根据图中的推理过程,我们知道,前序遍历,我们可以按照根左右的遍历顺序来遍历一棵二叉树或者多叉树,思想是一样的

先遍历根,再遍历从左边开始的第一个儿子

那此时左边开始的第一个儿子作为根时同样按照根左右的思想为指导方针,先遍历根,再遍历自己的从左边开始的第一个儿子,直到把这棵树遍历完毕即可

2、尝试编码

func preorder(root *Node)(ans []int) {
     // 定义一个函数,用于递归
      var dfs func(*Node)
        dfs = func(node *Node) {
        // 如果当前节点为空,则直接返回
        if node == nil {
            return
        }
        // 当前节点为根节点,先加入结果集,然后遍历该节点为根节点的子树
        ans = append(ans, node.Val)
        for _, ch := range node.Children {
            dfs(ch)
        }
    }
    dfs(root)
    return
}

四、总结:

使用递归的思想来做二叉树或者多叉树的题是比较简单的,对于二叉树或者多叉树,可以使用递归的方式遍历,也可以使用迭代的方式来进行处理,迭代的方式后续遇到了我们可以再来分享一波

使用上述递归的方式来实现 二叉树 / 多叉树前序遍历

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

空间复杂度是 O(m)

原题地址:589. N 叉树的前序遍历

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

欢迎点赞,关注,收藏

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

image.png

好了,本次就到这里

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

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


相关文章
|
网络虚拟化
【HCIE】12.VXLAN(二)
【HCIE】12.VXLAN
290 0
|
移动开发 算法 调度
【贪心算法】一文让你学会“贪心”(贪心算法详解及经典案例)
贪心算法是一种非常常见的算法,它的简单和高效性使其在实际应用中被广泛使用。 贪心算法的核心思想是在每一步都采取当前状态下最优的选择,而不考虑未来可能产生的影响。虽然贪心算法不能保证总是得到最优解,但在很多情况下,它可以获得很好的结果。 本篇文章将介绍贪心算法的基本概念和一些经典应用,以及如何通过贪心算法来解决一些实际问题。希望通过本文的阅读,读者可以对贪心算法有更加深刻的理解,并能够在实际问题中应用贪心算法来得到更好的解决方案。 让我们暴打贪心算法吧!
6092 0
|
存储
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
7340 1
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
|
1月前
|
安全 Linux 网络安全
Linux系统初步设置本地Git环境和生成SSH密钥的步骤。
现在您的Linux系统已经配置好了Git环境,并创建并添加了SSH密钥,可以安全地与远端仓库进行交互,无论是克隆、推送还是拉取操作。此过程确保了数据传输的安全并使版本控制流程更为顺畅。使用Git时应考虑定期更新并管理您的凭据,以确保安全性。
294 0
|
4月前
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
860 16
|
机器学习/深度学习 人工智能 算法
智能时代的伦理困境:人工智能决策的透明度与责任归属
当AI技术逐渐渗透到我们生活的每一个角落,它带来的便利和效率提升是显而易见的。然而,随之而来的伦理挑战也不容忽视。本文将探讨AI在做出决策时面临的透明度问题,以及由此引发的责任归属难题。通过分析AI系统的工作原理、决策过程及其对个人和社会可能产生的影响,我们将提出一系列针对当前AI伦理困境的解决方案和建议,旨在促进AI技术的健康发展同时保护人类社会的基本伦理原则。
1238 11
|
11月前
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
1539 0
|
机器学习/深度学习 数据可视化 Python
No module named 'pytorch_wavelets'问题如何解决
【6月更文挑战第21天】No module named 'pytorch_wavelets'问题如何解决
1550 0
|
消息中间件 设计模式 监控
简洁应用框架VSEF的架构
简洁应用框架VSEF的架构
281 0