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;
    }
相关推荐
考试宝1 小时前
国家宠物美容师职业技能等级评价(高级)理论考试题
经验分享·笔记·职场和发展·学习方法·业界资讯·宠物
好奇龙猫2 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸3 小时前
链表的归并排序
数据结构·算法·链表
jrrz08283 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time3 小时前
golang学习2
算法
面试鸭3 小时前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
南宫生4 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步5 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
Ni-Guvara5 小时前
函数对象笔记
c++·算法