LC 107.二叉树的层序遍历II

107. 二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1:

输入: root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

示例 2:

输入: root = [1]
输出:[[1]]

示例 3:

输入: root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]
  • − 1000 ≤ N o d e . v a l ≤ 1000 -1000 \leq Node.val \leq 1000 1000Node.val1000

解法一(BFS+队列)

思路分析:

  1. 使用辅助队列,一层一层遍历二叉树,每次将每层遍历的结果保存到一个列表中
  2. 因为要求返回从底层到顶层的顺序,可以每次保存到列表时从头开始保存,也可以按从上往下顺序保存后,再反转结果列表

实现代码如下:

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> ans = new LinkedList<>();    // 链表从头结点插入花费时间更低
        if (root == null)
            return ans;        // 边界情况
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> level = new ArrayList<>();    // 数组型花费更小
            for (int i = 0; i < size; ++ i) {
                TreeNode node = queue.poll();
                level.add(node.val);
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
            ans.add(0, level);    // 每次插入每层结点 从头插入
        }
        return ans;
    }
}

提交结果如下:

解答成功:
执行耗时:1 ms,击败了92.83% 的Java用户
内存消耗:41.9 MB,击败了5.03% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),只考虑对二叉树结点的遍历
  • 空间复杂度: O ( n ) O(n) O(n)

解法二(递归)

思路分析:

  1. 思路参考LC102.二叉树的层序遍历,在此基础上 需要对最后的结果进行反转

实现代码如下:

class Solution {
    // 递归
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> ans = new LinkedList<>();    // 链表从头结点插入花费时间更低
        BFS(root, 0, ans);
        Collections.reverse(ans);
        return ans;
    }

    private void BFS(TreeNode node, int deeply, List<List<Integer>> ans) {
        if (node == null)
            return ;
        if (deeply >= ans.size()) {
            List<Integer> level = new ArrayList<>();
            level.add(node.val);
            ans.add(level);
        } else {
            ans.get(deeply).add(node.val);
        }
        BFS(node.left, deeply + 1, ans);
        BFS(node.right, deeply + 1, ans);
    }
}

提交结果如下:

解答成功:
执行耗时:1 ms,击败了92.83% 的Java用户
内存消耗:41.4 MB,击败了11.17% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509885.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony实战开发-如何通过ArkTS卡片实现一个简单的音乐卡片

​介绍 本示例展示了如何通过ArkTS卡片实现一个简单的音乐卡片 效果预览 使用说明 1.安装应用&#xff0c;并在桌面上长按本应用的桌面图标&#xff0c;长按后弹出选项列表。 2.点击弹出列表中的服务卡片选项进入卡片添加界面。 3.点击正下方的添加到桌面按钮&#xff0c;…

uniapp项目-懂你找图

文章目录 项目介绍项目搭建1.项目创建 2.新增tabbar3引入字体图标 uni-ui介绍使用 uni-api介绍 首页模块功能分析搭建子页面分段器介绍 封装自己的异步请求为什么要封装封装的思路 编写首页-推荐页面分页功能 专辑列表获取专辑详情数据 项目介绍 微信小程序&#xff0c;提供图…

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站&#xff0c;这可太多了。 我之前学习SQL买了本SQL学习指南&#xff0c;把语法从头到尾看了个遍&#xff0c;但仅仅是心里有数的程度&#xff0c;后来进公司大量的写代码跑数&#xff0c;才算真真摸透了SQL&#xff0c;知道怎么调优才能最大化…

AWS迁移教程,Redis迁移到Elasticache

当企业不断出海拓展业务&#xff0c;面临的挑战之一就是如何高效迁移应用程序及数据库至云端。为解决这一问题&#xff0c;AWS云专门提供多种简单且高效的迁移方式&#xff0c;进行帮助企业实现应用程序的平稳迁移&#xff0c;从而降低迁移过程中的风险和成本。下面九河云将为大…

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming&#xff0c;即面向切面编程。 想象你是汉堡店的厨师&#xff0c;每一份汉堡都有好几层&#xff0c;这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡&#xff0c;如果按照传统的方…

数据结构:非比较排序

非比较排序都具有很大的局限性,包括技术排序,基数排序,桶排序等 计数排序 时间复杂度:O(N) 空间复杂度:O(range) 适用范围 数据的范围集中的数组进行排序,不适合数据分散的数组 方法 统计每个数据出现的次数为n 建立一个相同大小的数组,将每个数据都初始化为0 然后遍历…

链表优化与拓展的细节:深度探索与精致打磨

前言 链表&#xff0c;作为C语言中的基础数据结构&#xff0c;其灵活性和动态性使其在编程领域具有广泛的应用。然而&#xff0c;仅仅掌握链表的基本操作是远远不够的&#xff0c;为了更好地发挥链表的性能并满足复杂场景的需求&#xff0c;我们需要对链表进行深入的优化和拓展…

泛域名站群,泛域名程序

泛域名站群是一种利用大量类似的泛域名来建立多个网站&#xff0c;并通过这些网站链接到主网站&#xff0c;以提升主网站的排名和流量的策略。泛域名站群通常包含大量的子域名&#xff0c;这些子域名指向不同的页面&#xff0c;但它们的内容大部分是重复或相似的&#xff0c;目…

【蓝桥杯第十二届省赛B】(部分详解)

空间 8位1b 1kb1024b(2^10) 1mb1024kb(2^20) 时间显示 #include <iostream> using LLlong long; using namespace std; int main() {LL t;cin>>t;int HH,MM,SS;t/1000;SSt%60;//like370000ms370s,最后360转成分余下10st/60;MMt%60;t/60;HHt%24;printf("%02d:…

【Servlet】服务器内部转发以及客户端重定向

文章目录 一、服务器内部转发&#xff1a;request.getRequestDispatcher("...").forward(request, response);二、客户端重定向&#xff1a;response.sendRedirect("");三、服务器内部转发代码示例四、客户端重定向代码示例 一、服务器内部转发&#xff1a…

升级一下电脑,CPU换I5-14600K,主板换华硕B760M

刚给自己电脑升级了一下&#xff0c;CPU从 AMD R5 5600X 换成 Intel I5-14600K&#xff0c;主板换成了华硕的 TUF GAMING B760M-PLUS WIFI D4。 因为我现有的两根内存是DDR4的&#xff0c;所有我选了个支持DDR4内存的主板。 我发现用AMD处理器时将系统从Win10升级到Win11后变…

汤明磊对话许远东:“产业互联网的2024”: 赚钱治愈一切矫情,学习治愈一切焦虑!

3月22-23日&#xff0c;托比网南京公司开业活动举行&#xff0c;在“产业互联网的2024”主题沙龙上&#xff1a;二十二科技集团总裁许远东针对行业2024在人工智能与数据资产领域的发展了精彩观点。 以下为对话实录&#xff1a; 桐创资本合伙人汤明磊 二十二科技集团总裁许远东…

机器学习实验------线性回归方法

第1关&#xff1a;数据载入与分析 任务描述 本关任务&#xff1a;编写一个能够载入线性回归相关数据的小程序。 编程要求 该实战内容中数据为一元数据&#xff0c;利用 pandas 读入数据文件&#xff0c;并为相应的数据附上名字标签&#xff0c;分别为Population 和 Profit。…

⾃定义类型:联合和枚举

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

记忆力考验游戏-第15届蓝桥第5次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第178讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…

monocular depth estimation 网络的 regression loss 选择

直接上图&#xff1a; 上述这么多loss&#xff0c;测评结果如下&#xff1a; 结论: L g a n L_{gan} Lgan​ 是效果最好的。 其具体实现见&#xff1a;https://github.com/marcelampc/d3net_depth_estimation/blob/master/pytorch/util/loss_bank.py github&#xff1a;htt…

【THM】Burp Suite:Other Modules(其他模块)-初级渗透测试

介绍 除了广泛认可的Repeater和Intruder房间之外,Burp Suite 还包含几个鲜为人知的模块。这些将成为这个房间探索的重点。 重点将放在解码器、比较器、排序器和组织器工具上。它们促进了编码文本的操作,支持数据集的比较,允许分析捕获的令牌内的随机性,并帮助您存储和注释…

【区块链 链外交易】SoK Off The Chain Transactions

SoK Off The Chain Transactions 摘要 本文对区块链进行了简单介绍,分析目前区块链的缺点——交易吞吐量和速度慢的原因,在此基础上引出解决此问题的方法,也是本轮将要论述的主题——链外交易。之后介绍了链外交易的基本概念和结构,并对两种类型的链外交易:通道和信任链…

Windows 11 安装tensorflow-gpu深度学习环境

前言 TensorFlow 是一个由 Google 建立的深度学习库&#xff0c;自从去年年初推出以来&#xff0c;它已经获得了很大的吸引力。主要功能包括自动微分、卷积神经网络(CNN)和回归神经网络(RNN)。它是用 C 和 Python 编写的&#xff0c;为了提高性能&#xff0c;它使用了一个名…

Linux环境基础和工具的使用

目录 1、Linux软件包管理器---yum 2、Linux开发工具 2.1、vim基本概念 2.2 vim基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.5.1 配置文件的位置 3 Linux编译器--gcc/g的使用 3.1 背景知识 3.2 gcc完成 4 Linux调试器--gdb使用 4.1 背…