使用迭代法对二叉树进行后序遍历——Leetcode系列(六)

二叉树的前中后序遍历之迭代法(非统一风格迭代方式) 文章目录前言一、前序遍历(迭代法)1.代码实现二.中序遍历(迭代法)三、后序遍历(迭代法)总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中」,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。所以我们用栈也可以是实现二叉树的前后中序遍历。 一、前序遍历(迭代法) 前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。 为什么要先加入 右孩子,再加入左孩子呢?因. 阅读详情

Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3

return [3,2,1].

Note: Recursive solution is trivial, could you do it iteratively?

My Answer

<span style="font-size:14px;">/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        Stack<TreeNode> stack = new Stack<TreeNode>();
        List<Integer> list = new ArrayList<Integer>();
        if(root == null){
            return list;
        }
        stack.push(root);
        while(!stack.empty()){
            TreeNode top = stack.pop();
            if(top.left == null && top.right == null){
                list.add(top.val);
            }else{
                stack.push(new TreeNode(top.val));
                if(top.right != null){
                    stack.push(top.right);
                }
                if(top.left != null){
                    stack.push(top.left);
                }
            }
        }
        return list;
    }
}</span>

题目来源:https://oj.leetcode.com/problems/binary-tree-postorder-traversal/

【简单】力扣算法题解析LeetCode145:二叉树的后序遍历 这篇文章介绍了二叉树后序遍历的迭代实现方法。通过使用显式栈替代递归,结合状态标记(lastVisited指针)来判断右子树是否已处理,实现了高效的后序遍历算法。该算法时间复杂度为O(n),空间复杂度为O(h),其中h为树高。文章包含详细的设计思路、Java代码实现以及边界条件处理,并附有执行效果截图。该方法避免了递归的系统栈开销,通过精确控制节点访问顺序,确保了遍历的正确性和高效性。 阅读详情

相关推荐

【个人记录】CentOS7升级glibc至2.28

由于CentOS7系统已经停止支持, 虽然大部分业务已经迁移至OpenEuler,但仍然有部分业务系统跑在CentOS7上。在尝试部署新业务环境时经常会提示如下错误(以code-server运行需要的node 20为例)node -v为了保障业务可正常运行,通常采用Docker继承好的node环境进行部署,但部分场景还是需要宿主机使用新版glibc版本。本文记录本人一次成功升级glibc(2.17=>2.28)的步骤。

喵呜 3883

二叉树的后续遍历(迭代法)

迭代法实现二叉树的后续遍历 1、递归版本 public static void dfs(TreeNode root){ if(root==null){ return; } if(root.left!=null) dfs(root.left); if(root.right!=null) dfs(root.right); System.out.println(root.val); } 从递归版本可以看出我们第一步需要遍历完所有的左节点 这里

qq502130297的博客 2589

Cursor3.0新界面使用说明

本文摘要:Cursor 3.x版本更新后,提供了两套主界面:Editor(类似VSCode的代码编辑器)和AgentsWindow(以AI智能体为中心的新界面)。Editor适合日常编码,AgentsWindow则支持并行运行多个AI任务、云端协作和多仓库管理。通过Ctrl+E可快速切换布局。文章详细介绍了AI聊天面板的操作技巧、四种工作模式(Agent/Plan/Ask/Debug)的区别,以及AgentsWindow的多任务管理功能。同时提供了Windows快捷键速查、中文化设置方法,并对比了新旧版本的

2501_90421497的博客 725

二叉树进阶——迭代实现前中后序遍历

二叉树的递归遍历代码简单且容易理解,具体可以看这篇博客,里面的递归解释的较为详细 数据结构——二叉树的链式结构及实现(C语言) 然而现实生活中,一棵树的节点往往较多且深度更深时,如果继续使用递归就会产生较多的栈帧,导致栈溢出,对于Linux的进程地址空间来说,一个进程所分配的栈的空间大小是有限且较小的,因此这时候我们就需要使用迭代的方式来实现一棵树的遍历。 不过对于现代编译器而言,debug版本下的递归较大时会导致栈溢出,但是release版本编译器做了优化往往和迭代的效率差不多。 尽管这样,迭代方式还是要

900

面试复习题--RN面试

考察点:热更新方案的深度理解,选型能力,实战落地经验。答题思路主流热更新方案对比。

hqiangtai的博客 725

Jetson AGX Orin 部署 JetPack:从依赖缺失到系统升级的完整排障指南

本文详细介绍了在Jetson AGX Orin开发板上部署JetPack SDK的完整排障指南,包括解决依赖缺失、系统升级和常见错误处理。通过确认硬件版本、配置正确的软件源、执行系统升级和安装核心组件等步骤,帮助开发者顺利完成JetPack的安装与配置,确保AI开发环境的稳定运行。

weixin_29172963的博客 159

C++【迭代法实现前中后序遍历】

C++【迭代法实现前中后序遍历】

m0_59292239的博客 1584

光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

一旦结果与预测差距较大,可能存在光伏系统的问题,需要找出原因,然后采取适当措施来修复光伏系统并做出更好的决策。例如,根据准确的预测,光伏系统运营商可以平衡电力消耗,并将多余的电力储备用于紧急情况。然而,光伏系统的发电量估算是一个挑战,因为光伏系统的发电量受到天气条件的极大影响。整个项目文件夹(第一个文件夹为xgboost模型相关的包文件,xg.py是xgboost模型英文注释版本,xg_chinese.py是xgboost模型中文注释版本)表示空气的温度,通常以摄氏度(°C)或华氏度(°F)为单位。

2301_79699110的博客 3032

笔记83:二叉树前中后序遍历(迭代法 + 栈)

以下代码均为个人尝试编写,并非力扣题解,因此时间和空间复杂度可能并不是最优的,只是记录一下自己当时写这个题的时候的思路;

weixin_44063383的博客 626

仿真学习系列(二):ADS仿真直观理解方波与频谱分量的关系

在高速电路设计中,我们常常听到一句话:“信号其实不是电压在传输,而是频率在传播。” 这句话看似抽象,却揭示了信号世界的核心本质——任何时域波形,都可以被拆解为一系列不同频率的正弦波。 那么,一个看似简单的方波,究竟由哪些频率成分组成?为什么在示波器上,有的方波上升沿又快又“方”,而有的却“圆润”得多?这些差异背后,隐藏的正是高频分量的力量。 本文将通过使用 Keysight ADS,从零搭建仿真电路,直观地观察方波与其谐波成分之间的关系。

案例文章,高速信号 813

Agisoft Metashape 基于RTK技术的无人机航测免像控技术流程

利用无人机进行航空摄影测量,其使用方便、快速获得成果,已经是测绘行业外业生产的主要方式。RTK定位系统的出现,其厘米级的定位系统,使得航测无人机在作业时,能够准确获取拍照时的GPS位置,能够大量减少像控点,即使不使用像控点也能满足规范对精度的要求。可以有效解决特殊地形(如山川、峡谷、河流、沼泽、水库等)外业人员很难布设像控点的情况。

penglu366366的博客 2188

leetcode145. 二叉树的后序遍历,递归法+迭代法,全过程图解+步步解析,一点点教会你迭代法后序遍历

leetcode145. 二叉树的后序遍历,递归法+迭代法,全过程图解+步步解析,一点点教会你迭代法后序遍历

热爱C++和golang的学生 1676

【知识分享】IBIS 建模指南 05

本文详细阐述了IBIS模型创建过程中的关键技术和数据规范要求。主要内容包括:1. 数据完整性检查要点,强调I-V和V-T数据必须覆盖所有工艺角且匹配;2. 数据限制处理方法,介绍100/1000点限制下的两种数据筛选算法;3. 特殊数据处理技术,包括内部终端电阻调整和V-T表时间窗口选择;4. 高级关键字应用,涵盖[ModelSelector]、[Sub model]、[DiffPin]等复杂功能实现方法;5. 预加重缓冲器等特殊结构的建模方案。

一只豌豆象的博客 1594

二叉树遍历之统一迭代法:轻松实现前中后序遍历

在二叉树的遍历中,我们常常会遇到前序遍历、中序遍历和后序遍历这三种方式。递归是一种很直观的实现方法,但迭代法也有其独特的优势。今天我们要介绍一种二叉树遍历的统一迭代法,它可以像递归法通过调整顺序那样,轻松实现前、中、后三种遍历方式。

Hhjhj255的博客 1322

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

二叉树的前中后序遍历(迭代法)( 含leetcode上三道【前中后序】遍历题目)

此时我们用迭代法写出了二叉树的前后中序遍历,大家可以看出前序和中序是完全两种代码风格,并不像递归写法那样代码稍做调整,就可以实现前后中序。这是因为前序遍历中访问节点(遍历节点)和处理节点(将元素放进res数组中)可以同步处理,但是中序就无法做到同步!上面这句话,可能一些同学不太理解,建议自己亲手用迭代法,先写出来前序,再试试能不能写出中序,就能理解了。

YouMing_Li的博客 1149

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

二叉树的前中后序遍历(迭代法)

本文系统介绍了二叉树前序、中序和后序遍历的迭代实现方法。前序遍历采用栈结构,按;根→右→左 ;顺序入栈;中序遍历先全部左子树入栈再访问节点;后序遍历则通过修改前序遍历顺序为"根→右→左 ;后反转结果。三种遍历时间复杂度均为O(n),空间复杂度最坏O(n)。与递归实现相比,迭代方法避免了栈溢出风险,处理大型树更稳定。每种遍历方式都配有详细代码解析、执行示例和复杂度分析,并讨论了实际应用场景,为掌握树结构操作提供了系统指导。

mrjieke6的博客 1586

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LeetCode刷题笔记:二叉树前序遍历、中序遍历、后序遍历和层序遍历 | 递归法 | 迭代法 | 统一迭代法 | 深度优先搜索 | 广度优先搜索

Problem:144. 二叉树的前序遍历Problem:94.二叉树的中序遍历Problem:145.二叉树的后序遍历Problem:102. 二叉树的层序遍历Problem:107. 二叉树的层序遍历 II二叉树的遍历方式有多种,毛毛张今天在这里结合代码随想录的教程来分享一下二叉树的多种遍历方式及代码实现深度优先遍历和广度优先遍历。

神马都会亿点点的毛毛张 1205

leetcode144. 二叉树的前序遍历、94 二叉树的中序遍历、145 二叉树的后序遍历

从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式:在深度优先遍历中:有三个顺序,前中后序遍历,很容易搞混,这里有一个技巧:这里前中后,其实指的就是的遍历顺序,只要记住 前中后序指的就是的位置就可以了看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式前序遍历:中左右中序遍历:左中右后序遍历:左右中可以对着下图,看看自己理解的前后中序有没有问题:二叉树的遍历方式已经学会了,现在可以退出啦(bushi。

qq_68664071的博客 816

二叉树的统一迭代法 | LeetCode 144. 二叉树的前序遍历、LeetCode 94. 二叉树的中序遍历、LeetCode 145. 二叉树的后序遍历

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

2301_80211119的博客 765

JavaScript:二叉树(前序遍历,中序遍历,后序遍历,递归法,统一迭代法)

JavaScript:二叉树(前序遍历,中序遍历,后序遍历,递归法,统一迭代法)

weixin_51249285的博客 2421

【算法系列-二叉树】二叉树遍历系列(递归+迭代)

欢迎来到【算法系列】第六弹 🏆 二叉树,接下来我们将围绕二叉树这类型的算法题进行解析与练习!一起加油吧!!( •̀ ω •́ )✧✨

Mwt258的博客 2098

力扣刷题 二叉树的迭代遍历

题干给你二叉树的根节点root,返回它节点值的遍历。

never1624的博客 1795

二叉树后序遍历(递归法和迭代法(非递归法))——C++

一、二叉树后序遍历 后序遍历是先遍历左子节点left,在遍历右子节点right,最后遍历父节点parent,即遍历顺序:1.2 迭代法 由于后续遍历如果按照正常迭代思路去实现将不好理解和实现,仔细观察下面前序和后续遍历顺序,可以发现一个规律: 前序遍历:parent ——> left ——> right 前序遍历: left ——> right ——>parent, 将后续遍历逆序过来遍历,则:parent ——> right ——>left 通过观察1和3可以发现,两者都是先遍历父节点,再遍历左

净无邪博客 2221

力扣二叉树的先、中、后序遍历(递归和迭代法)

5出栈,然后7入栈,最后7出栈。中序遍历的遍历顺序是左、根、右,与先序遍历不同,中序遍历的遍历节点和处理节点并不相同,第一个遍历的节点是根节点,而我们要处理的节点是一整棵二叉树的最左边的那个节点,所以相比先序和后序遍历,中序遍历要多一个指针来指向当前处理的节点。先序遍历的顺序是根、左、右,后序遍历的顺序是左、右、根,我们可以将原本先序遍历的代码修改成让左孩子先入栈,再将右孩子入栈,即最终得出来的数组是根、右、左的顺序,最后将数组进行反转,就可以得到我们的后序遍历啦。3.确定单层循环逻辑。

2301_78245220的博客 731

LeetCode 145 二叉树的后序遍历

LeetCode 145 二叉树的后序遍历 题目链接 给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 看题目的意思是想让我们写个非递归的后序遍历,但那个非常复杂,所以我强行来了一波递归????,AC代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tr

旺崽的博客 2728

算法打卡day12|二叉树篇01|Leetcode 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

JAVA算法|二叉树篇01Leetcode 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

改变从现在开始 1667
上一篇: 使用插入排序算法对列表进行排序——Leetcode系列(五)
下一篇: 使用迭代法对二叉树进行前序遍历——Leetcode系列(七)
Hooting
博客等级 码龄17年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值