首页 > 其他分享 >[LeetCode Hot 100] LeetCode145. 二叉树的后序遍历

[LeetCode Hot 100] LeetCode145. 二叉树的后序遍历

时间:2023-12-27 18:00:55浏览次数:37  
标签:node right TreeNode val res Hot 二叉树 LeetCode145 left

题目描述

思路

  • 递归:额外写一个函数void postOrder(TreeNode node, List res)
  • 迭代
    • 前序遍历:根---左---右
    • 前序遍历改造成:根---右---左
    • 然后反转根右左为:左---右---根,即为后序遍历
    • 优化一下:
while (!stack.isEmpty()) {
	TreeNode node = stack.pop();
	res.addFirst(node.val);
	if (node.left != null) stack.push(node.left);
	if (node.right != null) stack.push(node.right);
}

方法一:递归

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        postOrder(root, res);
        return res;
    }
    private void postOrder(TreeNode node, List<Integer> res) {
        if (node == null) return;
        postOrder(node.left, res);
        postOrder(node.right, res);
        res.add(node.val);
    }
}

方法二:迭代

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        Deque<TreeNode> stack = new ArrayDeque<>();
        if (root == null) return res;
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            res.add(node.val);
            if (node.left != null) stack.push(node.left);
            if (node.right != null) stack.push(node.right);
        }
        Collections.reverse(res);
        return res;
    }
}

优化一下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        Deque<TreeNode> stack = new ArrayDeque<>();
        if (root == null) return res;
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            res.addFirst(node.val);
            if (node.left != null) stack.push(node.left);
            if (node.right != null) stack.push(node.right);
        }
        //Collections.reverse(res);
        return res;
    }
}

标签:node,right,TreeNode,val,res,Hot,二叉树,LeetCode145,left
From: https://www.cnblogs.com/keyongkang/p/17931099.html

相关文章

  • 代码随想录算法训练营第十四天 | 二叉树理论基础,递归遍历,分别迭代遍历, 统一迭代遍历
    一、二叉树理论基础学习:1.从二叉树是否包含数值进行分类:无数值:完全二叉树和满二叉树有数值的:二叉搜索树和平衡二叉搜索树(AVL,Adelson-VelskyandLandis)。其中二叉搜索树指数值按照从小到大的顺序是左子树<根结点<右子树,平衡指的是左右子树高度差不超过12.二叉树存......
  • 二叉树路径总和系列问题
    二叉树路径总和系列问题作者:Grey原文地址:博客园:二叉树路径总和系列问题CSDN:二叉树路径总和系列问题LeetCode112.路径总和定义递归函数booleanprocess(TreeNodenode,intpreSum,inttarget)递归含义表示:从node节点一直到树的叶子节点,preSum表示node之前的节点......
  • GPT-3《Language Models are Few-Shot Learners》解读
    GPT-3和GPT-2差别1. 效果上,超出GPT-2非常多,能生成人类难以区分的新闻文章;2. 主推few-shot,相比于GPT-2的zero-shot,具有很强的创新性;3. 模型结构略微变化,采用sparseattention模块;4. 海量训练语料 45TB(清洗后570GB),相比于GPT-2的40GB;5. 海量模型参数,最大模型为......
  • 算法题:剑指 Offer 07. 重建二叉树(题目+思路+代码+注释)时空时间优先选O(N) O(N) 2ms击
    题目剑指Offer07.重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例1:Input:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]Output:[3,9,20,null,null,15,7]示例2:Input:......
  • 树与二叉树与森林
    2、若将一棵树T转化为对应的二叉树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是______。A.先序遍历B.中序遍历C.后序遍历D.按层遍历解析:在后根遍历(也称为后序遍历或后序遍历)中,对于T的每个节点,首先遍历其左子树,然后遍历其右子树,最后访问该节点本身。而在中根......
  • Topaz Photo AI for windows V2.2.1最新免激活版
    软件介绍:TopazPhotoAIforwindowsV2.2.1免激活版是一款专业的人工智能图片降噪软件,得益于Topaz公司AI算法,这款照片修复软件可以在修复照片的同时运用人工智能算法AI模型计算图片模糊部分,自动修复图片受损的细节,以增强图片画质.云盘下载链接:https://pan.xunlei.com/s/VNmVW......
  • 启动springboot的测试类,报红:Java HotSpot(TM) 64-Bit Server VM warning: Sharing is
    启动springboot的测试类时,报红:JavaHotSpot(TM)64-BitServerVMwarning:Sharingisonlysupportedforbootloaderclassesbecausebootstrapclasspathhasbeenappended原因:JavaHotSpot(TM)64位服务器虚拟机已附加引导程序类路径解决办法:IDEA—》Settings—》Build......
  • 二叉树 - 基本概念
    1.树的基本概念与数组链表不同,树是一种非线性的存储结构,它由n(n>=0)个节点构成并具有层次关系的存储结构把这个存储结构叫做树是因为它看上去像一颗倒挂着的树,只是根在上叶子在下它有以下特性:1. 有一个特殊的结点,称为根结点,根结点没有前驱结点2.树是由若干不相交的......
  • 完全二叉树的公共父结点
    1.有点后序遍历的思想,就是先把左子树,右子树的结果算出来,然后合并到根节点。2.合并时四种情况分类讨论.3.对于遇到要找的点就可以直接返回,不管另一个点在这个点下面还是在别的子树上,都是正确的intn,m;inta[N];intquery(introot,intx,inty){ //cerr<<root<<endl; if(r......
  • HOT 100 最难的题居然是游戏厂的最爱
    写在前面翻看网易历年笔面题单的时候,发现一道有意思的题目。该题评论区,网易的踪影很少,反而被那些在4399笔试中遇到的同学所攻陷:*好嘛,所以这道题还是「游戏厂」的最爱?!*......