Leetcode 589.N叉树的前序遍历(简单)递归、非递归实现

多叉树的后序非递归遍历 多叉树的建立以及后序非递归遍历,希望对学习数据结构的同学有所帮助,也对树一部分有更深的了解。 立即下载

题目描述:

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

例如,给定一个 3叉树 :

 

 

返回其前序遍历: [1,3,5,6,2,4]。

 

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal

思路:1.非递归,用单独的栈来记录子树的情况,类比二叉树的非递归遍历可以实现。注意先右子树入栈再左子树。

           2.递归

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/
//非递归就是用专用的栈来实现,对比二叉树的非递归是先入栈右子树,所以注意这里的
//入栈次序,也是由右向左的顺序
class Solution {
public:
    vector<int> preorder(Node* root) {
        vector<int> result;
        stack<Node*> stk; //stack的类型是指向Node的指针,开始写stack<Node>错
        if(root == NULL) return result;
        stk.push(root);
        while(!stk.empty())
        {
            Node* tmp= stk.top();
            result.push_back(tmp->val);
            stk.pop();
            for(int i=tmp->children.size()-1; i>=0; --i)
            {
                stk.push(tmp->children[i]);
            }
        }
        return result;
    }
};
/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/
//递归法
class Solution {
public:
    vector<int> result;
    vector<int> preorder(Node* root) {    
        if(root != NULL){
            result.push_back(root->val);//先序根节点,然后递归遍历每一个子树
            for(auto child : root->children){
                preorder(child);
            }
        }
        return result;
    }
};
/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/
//递归法
class Solution {
public:
    void preord(Node *root, vector<int>& t)
    {
        if(root == NULL)  return;
        t.push_back(root->val);
        for(auto p: root->children)
            preord(p,t);
    }
    vector<int> preorder(Node* root) {
        vector<int> result;    
        preord(root,result);
        return result;
    }
};

 

 

AG32VF407直流电流采集仪设计:从1uA到10A宽范围采样与FPGA加速方案 本文详细介绍了基于AG32VF407芯片的直流电流采集仪设计方案,实现了从1uA到10A的宽范围采样。方案采用低噪声电源、精密运放调理、高速比较器自动档位切换及高精度ADC同步采样,并重点阐述了利用AG32VF407片内FPGA实现硬件加速以提升性能的架构思路,为精密电流测量提供了完整的硬件与FPGA加速解决方案。 阅读详情

相关推荐

svn co --depth和svn up --set-depth 只check out下一层文件 只更新指定文件 只更新下一层的用法

svn的工程可能很大 有时我们只需要部分文件即可 这里介绍几个命令 1.svn co(check out) --depth --depth=empty,files,immediates,infinity 假设某svn结构如下 svn://root/PRO/A_dir/a svn://root/PRO/B_dir/b svn://root/PRO/c_file svn co --depth=emptysvn://root/PRO 此时只会在本地check out出 PRO/的空目录。 sv.

cy413026的博客 1万+

非递归前序、中序遍历代码推演出后序遍历代码(极其透彻)

为何非递归前序和后序遍历代码套路不能使用在非递归后序遍历中,非递归后序遍历代码怎么来的?详细解释,非常透彻!

kashine的博客 1851

ADS SerDes仿真实战:深入解析Tx_Diff均衡器(EQ)参数对眼图质量的影响

本文以ADS仿真平台为基础,深入解析了SerDes设计中Tx_Diff均衡器(EQ)参数对信号完整性的核心影响。通过实战演示,详细对比了去加重(De-emphasis)与FIR抽头系数两种调节模式,揭示了它们如何有效对抗信道损耗与码间干扰,从而显著改善眼图的高度、宽度与抖动性能,为高速串行链路设计提供关键调优思路。

weixin_29230901的博客 226

C语言N叉树非递归(前中后遍历法)

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct kk { char ch; int flag; struct kk *left; struct kk *right; }btree; typedef struct stack { btree *btree[20]; ...

qq_40663787的博客 1058

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 632

QT5.14.2离线安装包保姆级教程:断网、选组件、避坑全记录

本文详细介绍了QT5.14.2离线安装包的完整流程,特别针对Windows平台开发者提供断网安装、组件选择及避坑指南。作为QT5系列中最后一个免费离线版本,5.14.2具有免注册、全组件离线安装等独特优势,是开源开发者的理想选择。文章涵盖从环境准备到安装后配置的全方位指导,帮助开发者高效完成安装并避免常见问题。

weixin_30924087的博客 578

JAVA实现二叉树、N叉树递归/非递归实现前、中、后序遍历

在写剑指offer和LeetCode算法时,遇到了有关二叉树前中后序遍历的题目,之前一直使用递归写法,导致对非递归写法有点生疏了,在此记录一下。对于非递归写法,通常都是借助栈或队列等数据结构,在实现过程中一定要时刻牢记栈(先进后出)、队列(先进先出)等特性。再就是前(根左右)中(左根右)后(左右根)序遍历。 题目解答中用到的TreeNode类,定义如下: public class TreeNode...

xl132598798的博客 584

Python 爬虫实战:爬取去哪儿网酒店评价,提取住宿体验关键词

本文介绍了基于去哪儿网酒店评价数据的爬取与分析方法。首先通过分析网页结构和数据加载机制,定位到评价数据的JSON接口及关键参数。然后使用Python搭建爬虫环境,实现多页评价数据的批量采集与存储,并通过反爬策略确保数据获取的稳定性。在文本分析环节,采用jieba分词和TF-IDF算法提取高频关键词,结合词云可视化展示用户关注点。分析结果显示位置、服务、卫生是核心关注维度,同时识别出好评与差评的关键驱动因素。该方法为酒店服务优化和消费者决策提供了数据支持,并可通过扩展实现更深入的情感分析和竞品对比。

2503_91057718的博客 999

深度优先遍历与广度优先遍历

深度优先遍历 1.深度优先遍历的递归定义   假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访...

weixin_34068198的博客 739

DMA engine initialization failed rk3568的原因及解决方案

刚开始调试 switch 芯片的时候由于rgmii 时钟是output , rk3568的 GMAC 需要 switch 芯片提供 125M的时钟,如果没有这个时钟就会初始化失败,进入文件系统后 ethx 不会出现(当然,如果屏蔽掉这里ethx 会出现,但是引发更多的问题,笔者在这块耍小聪明,导致耗费了近一个月时间,把网络这块整个查了一遍 -----)dma 软复位是在进入文件系统后,网络系统启动的时候,我想如果在这个之前只要提供合适的时钟那么就是可以的,那么------以上是官方的文档说明。

Nyiragongo的博客 4574

AgentScope 2.0 API完全指南:构建企业级AI智能体应用的技术实践

本文系统梳理AgentScope 2.0框架的完整API体系,涵盖智能体核心引擎、统一模型适配层、工具系统、消息协议、权限控制与工作空间管理等七大核心模块。通过深入的源码级分析与架构图示,详细解读Agent类的推理-行动循环、ChatModelBase的多模型抽象、Toolkit的工具管理机制、ContentBlock的多模态内容表达、PermissionEngine的安全决策流程,以及Local/Docker/E2B三种工作空间实现。文章还提供了智能客服系统的完整实战案例,展示从自定义工具开发到流式服务部

program哲学 427

Simulink汽车行驶阻力建模:从物理公式到子系统封装

在整车动力性开发中,动力性能仿真是验证加速、爬坡和最高车速等指标的核心手段。行驶阻力作为车辆纵向动力学的基础,其计算精度直接影响仿真结果的可靠性。工程中常借助MATLAB/Simulink搭建可复用的阻力模型,将滚动阻力、空气阻力、坡度阻力与加速阻力分解为独立子系统,并通过参数脚本统一管理整车质量、风阻系数等关键参数。这种模块化建模方式不仅便于调参与批量仿真,还可为后续代码生成和整车控制策略开发提供标准化接口。从基础物理公式出发,结合工程实践掌握阻力子系统的搭建、封装与验证方法,能显著提升建模效率。本文以S

weixin_34060299的博客 471

ABAP BDC 处理踩坑笔记:把错误挡在录制之前,把稳定做进每一行 BDCDATA

本文总结了SAP BDC(批输入)开发中的常见问题和解决方案。重点包括:1)理解BDCDATA本质是模拟人工操作而非直接操作数据库;2)数据格式化技巧,如金额、日期、物料号等字段的标准化处理;3)通过CTU_PARAMS参数控制执行环境,确保屏幕尺寸和更新模式一致;4)不要依赖sy-subrc,应通过解析MESSTAB消息判断业务是否成功;5)录制阶段的常见陷阱及解决方法;6)疑难问题的系统性解决思路;7)建议建立完善的错误处理机制,包括日志记录和重跑功能。文章提供了实用的ABAP代码示例和配置建议,帮助开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 265

树、二叉树的前中后层序遍历(递归、非递归Java实现)

文章目录1. 二叉树的前中后序遍历(递归,非递归)以及层序遍历1.1 二叉树前中后遍历的递归解法1.2 二叉树前中后遍历的非递归解法1.2.1 非递归的前序遍历:(LeetCode 144)1.2.2 非递归的中序遍历:(LeetCode 94)1.2.3 非递归的后序遍历:(LeetCode 145)1.3 层序遍历:(LeetCode 102、103、107)2 树的前中后层序遍历2.1 前序...

卤小蛋学编程 5078

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

算法训练(leetcode)休息日 | 589. N 叉树的前序遍历、590. N 叉树的后序遍历、100. 相同的树、572. 另一棵树的子树

LeetCode刷题日记

weixin_43872997的博客 1376

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

leetcode589. N叉树的前序遍历

leetcode589. N叉树的前序遍历 给定一个 N 叉树,返回其节点值的前序遍历。 例如,给定一个 3叉树 : 返回其前序遍历: [1,3,5,6,2,4]。 递归法 class Solution { public ArrayList<Integer>list=new ArrayList<>(); public List<Intege...

peony的博客 360

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【算法589】 N叉树的前序遍历

题目描述:(来源于力扣589) 给定一个 N 叉树,返回其节点值的前序遍历。 例如,给定一个 3叉树 : 返回其前序遍历: [1,3,5,6,2,4]。 解法: 1)递归实现 递归实现比较简单。 class Solution { public: vector<int> ret;//存储返回值 vector<int> preorder(Node* root...

喜欢吃冰棍de谷利文君的博客 239

LeetCode中N叉树的前序中序后序递归和非递归写法和层序遍历写法

LeetCode中N叉树的前序中序后序递归和非递归写法 相关题: 589. N叉树的前序遍历 429. N叉树的层序遍历 N叉树的后序遍历 589. N叉树的前序遍历 给定一个 N 叉树,返回其节点值的前序遍历。 递归写法 /* // Definition for a Node. class Node { public: int val; vector<Node*&gt...

virgilshi的博客 598

leetcode 589. N叉树的前序遍历

给定一个 N 叉树,返回其节点值的前序遍历。 例如,给定一个3叉树: 返回其前序遍历:[1,3,5,6,2,4]。 非递归写法 /* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} ...

Geek_sun的博客 251

LeetCode --- 589. N叉树的前序遍历

LeetCode链接:589. N叉树的前序遍历 /* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val;...

宋卓的博客 185

LeetCode 题目-589.n叉树的前序遍历/590.n叉树的后序遍历(python实现)

作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢? 589.n叉树的前序遍历 题目要求 给定一个 N 叉树,返回其节点值的前序遍历。 分析 方法:前序遍历,分别使用递归和非递归实现 class Solution(object): def preorder(self, root): if not root: retu...

A_彬的博客 288

day20【代码随想录】二叉树的前序遍历、N叉树的前序遍历、二叉树的中序遍历、二叉树的后序遍历、N叉树的后序遍历

1、二叉树的前序遍历2、N叉树的前序遍历3、二叉树的中序遍历4、二叉树的后序遍历5、N叉树的后序遍历

qq_42338744的博客 895

LeetCode589. N叉树的前序遍历

题目: 给定一个 N 叉树,返回其节点值的前序遍历。 解题思路 1.递归法 类似于二叉树的前序遍历的递归写法 代码实现(c++) vector&lt;int&gt; res; vector&lt;int&gt; preorder(Node* root) { if(root == nullptr) return res; else...

xiao1guaishou的博客 165

Leetcode589N叉树的前序遍历

给定一个 N 叉树,返回其节点值的前序遍历。 思路:发现了前序中序后序遍历的非递归实现,肯定 /* // Definition for a Node. class Node { public: int val; vector<Node*> children; Node() {} Node(int _val, vector<Node*...

weixin_39137699的博客 94

LeetCode刷题笔记589:N叉树的前序遍历(Python实现)

题目描述: 给定一个 N 叉树,返回其节点值的前序遍历。 例如,给定一个3叉树: 返回其前序遍历: [1,3,5,6,2,4]。 说明:递归法很简单,你可以使用迭代法完成此题吗? Solution: 1.递归实现: Code: #递归 class Solution: def preorder(self,root): ''' ...

FiveStarsGeneral的博客 223

leetcode 589.N叉树前序遍历【非递归】

执行用时 :288 ms, 在N-ary Tree Postorder Traversal的C++提交中击败了62.39%的用户 内存消耗 :127.3 MB, 在N-ary Tree Postorder Traversal的C++提交中击败了10.94%的用户 利用栈的思想,从后往前入栈,后入先出。 在出栈的时候统一push_back(OR直接print)到ans数组中。 ...

二十四桥明月夜的博客 248
上一篇: Leetcode 557. 反转字符串中的字符 III (简单)字符串应用
下一篇: Leetcode 605.种花问题(简单)
Perrysky
博客等级 码龄11年 16粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值