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;
    }
相关推荐
alphaTao5 分钟前
LeetCode 每日一题 2026/4/20-2026/4/26
算法·leetcode·职场和发展
Robot_Nav1 小时前
TD3 —— 双延迟深度确定性策略梯度算法文献解读
算法·td3·drl
斯维赤1 小时前
每天学习一个小算法:归并排序
学习·算法·排序算法
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:区间覆盖(加强版)
c++·算法·贪心·csp·信奥赛·区间贪心·区间覆盖(加强版)
碧海银沙音频科技研究院1 小时前
杰理项目开发大全课程
人工智能·深度学习·算法
风一样的航哥1 小时前
LeetCode 2615 等值距离和:前缀和优化O(n)解法深度解析
数据结构·算法·leetcode
生成论实验室2 小时前
生成态势猜想:一种统一的宇宙动力学语法
人工智能·科技·神经网络·算法·信息与通信
旖-旎2 小时前
深搜(二叉树的所有路径)(6)
c++·算法·leetcode·深度优先·递归
啦啦啦_99992 小时前
3. KNN算法之 常用的距离度量方式(欧式&曼哈顿&切比雪夫&闵式距离)
算法
朝风工作室3 小时前
实时全景拼接|支持任意路数输入,8*8K RTX3050 实测 10ms 内
图像处理·算法·计算机视觉