Leetcode 145:二叉树的后序遍历(迭代法)

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

思路:

迭代法的思路是,使用栈,一层一层的将树节点遍历入栈。

比如下面这个树,使用迭代法,1)第一层,让根节点入栈。2)第二层,弹出第一层的节点,让第一层的孩子入栈(先左再右)。3)第三层,依次弹出第二层元素,让其子节点入栈。

结果为,第一步:5入栈,出栈,result中存储5;

第二步:4,6依次入栈;6无子节点,所有6出栈,result中存储6;

第三步:4出栈,result存储4。同时,4的子节点1、2先后入栈。因为这两个子节点都无孩子节点,所有2,1出栈,result中存储2,1。

至此,result中存储值为5、6、4、2、1;

翻转后为1,2,4,6,5

java 复制代码
//后序遍历
    //迭代法:重复执行一段代码来求解
    //利用栈,先将根节点的右孩子放进栈,再将左孩子放进栈
    public static List<Integer> postorderTraversal(TreeNode root){
        List<Integer> result=new ArrayList<>();
        Stack<TreeNode> stack=new Stack<>();

        if(root!=null){
            stack.push(root);
        }

        while (!stack.empty()){
            TreeNode node=stack.pop();   //取栈顶元素
            result.add(node.val);

            if(node.left!=null){
                stack.push(node.left);     //左节点入栈
            }
            if(node.right!=null){
                stack.push(node.right);    //右节点入栈
            }
        }
        Collections.reverse(result);     //翻转List
        return result;
    }
相关推荐
多米Domi0114 分钟前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
A_nanda9 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
代码雕刻家11 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov11 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业12 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德13 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
diediedei13 小时前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI13 小时前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz120713 小时前
分治算法(c++)
c++·算法
睡一觉就好了。13 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法