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;
    }
相关推荐
云闲不收13 分钟前
垃圾回收——三色标记法(golang使用)
jvm·算法·golang
菜鸟江多多22 分钟前
32x32热成像高斯滤波图像处理
图像处理·单片机·算法
阳洞洞32 分钟前
二叉树的层序遍历
数据结构·算法·leetcode·二叉树遍历·广度优先搜索
今天也要早睡早起33 分钟前
代码随想录算法训练营Day32| 完全背包问题(二维数组 & 滚动数组)、LeetCode 518 零钱兑换 II、377 组合总数 IV、爬楼梯(进阶)
数据结构·c++·算法·leetcode·动态规划·完全背包
火车叼位1 小时前
初中生也能懂的贝叶斯定理:拆解一个改变世界的公式
人工智能·数学·算法
ChoSeitaku1 小时前
NO.66十六届蓝桥杯备战|基础算法-贪心-区间问题|凌乱的yyy|Rader Installation|Sunscreen|牛栏预定(C++)
c++·算法·蓝桥杯
用手码出世界1 小时前
二叉树——队列bfs专题
数据结构·算法·宽度优先
OneQ6662 小时前
C++自学笔记---指针在数组遍历中的应用
c++·笔记·算法
EnigmaCoder2 小时前
蓝桥杯刷题周计划(第四周)
c++·算法·蓝桥杯
绿水毛怪.2 小时前
蓝桥杯基础算法-字符串与集合
算法·职场和发展·蓝桥杯