[剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]

【问题描述】[简单]


从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:
给定二叉树: [3,9,20,null,null,15,7],3/ \9  20/  \15   7
返回其层次遍历结果:[[3],[9,20],[15,7]
]

【解答思路】

层次遍历 BFS

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(N)
在这里插入图片描述

  public List<List<Integer>> levelOrder(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();//与32-1 不同之处List<List<Integer>> res = new ArrayList<>();if(root != null){queue.add(root);}while(!queue.isEmpty()) {List<Integer> tmp = new ArrayList<>();for(int i=queue.size(); i>0;i-- ){TreeNode node = queue.poll();tmp.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}res.add(tmp);}return res;}

【总结】

1.细节

1.1 Queue
新建

  // Queue<TreeNode> queue=  new LinkedList<>();//queue.add(root);Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};

入队出队 add(x) poll()

1.2 ArrayList
新建
ArrayList ans = new ArrayList<>();
长度 size()
获取元素 get(i)

2. Queue


Queue是在两端出入的List,所以也可以用数组或链表来实现。

  • add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  • remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  • element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  • offer 添加一个元素并返回true 如果队列已满,则返回false
  • poll 移除并返问队列头部的元素 如果队列为空,则返回null
  • peek 返回队列头部的元素 如果队列为空,则返回null
  • put 添加一个元素 如果队列满,则阻塞
  • take 移除并返回队列头部的元素 如果队列为空,则阻塞
注意
  • remove、element、offer 、poll、peek 其实是属于Queue接口。

  • add remove element操作在队满或者队空的时候会报异常。

  • offer poll peek 在队满或者队空的时候不会报异常。

  • put take操作属于阻塞操作。队满队空均会阻塞。

3.LinkedList
  • 以双向链表实现的LinkedList既是List,也是Queue。
  • 它是唯一一个允许放入null的Queue。
4.BFS 层次遍历 队列实现

转载链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/solution/mian-shi-ti-32-ii-cong-shang-dao-xia-da-yin-er-c-5/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫入门-3.初识BeautifulSoup

一.安装BeautifulSoup BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup配合Request使用&#xff0c;能大大提高爬虫效率。 pip install BeautifulSoup 二.常见操作 from bs4 impor…

19.jsp生命周期

JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期。 JSP生命周期就是从创建到销毁的整个过程&#xff0c;类似于servlet生命周期&#xff0c;区别在于JSP生命周期还包括将JSP文件编译成servlet。 以下是JSP生命周期中所走过的几个阶段&#xff1a; 编译阶…

HDU-3998 Sequence LIS统计

题意 让我们在数串统计最长长度的LIS有多少个 每个LIS元素没有重叠 分析 这题可以用nlogn的LIS方法水过 就是每次我们更新找到的LIS长度的时候 就把当前位置下的元素标记 表示我们把它删掉了 不断地重复找LIS的过程 最后如果找到的长度小于我们最初找到的LIS长度 就退出循…

[剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]

【问题描述】[中等] 请实现一个函数按照之字形顺序打印二叉树&#xff0c;即第一行按照从左到右的顺序打印&#xff0c;第二层按照从右到左的顺序打印&#xff0c;第三行再按照从左到右的顺序打印&#xff0c;其他行以此类推。 例如: 给定二叉树: [3,9,20,null,null,15,7],3/ …

20.jsp语法

JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法。 脚本程序 脚本程序可以包含任意量的Java语句、变量、方法或表达式&#xff0c;只要它们在脚本语言中是有效的。 脚本程序的语法格式&#xff1a; <% 代码片段 %> 或者&#xff0c;您也可以编写与其等价的XM…

HDU-4282 A very hard mathematic problem 技巧枚举+二分

题意 xzyzx∗y∗zk( y>x&&z>1) 给我们这个等式让我们找出这里面有多少个不同的可行解 分析 表面上数据范围比较大 但由于k最大都在int范围内 由于后面还有一个x*y*z 于是这个式子的指数不会超过31 再来分析x和y 这里必定是一个y大x小 那么假如我们先枚举一个…

21.jsp指令

JSP 指令 JSP指令用来设置整个JSP页面相关的属性&#xff0c;如网页的编码方式和脚本语言。 语法格式如下&#xff1a; <% directive attribute"value" %> 指令可以有很多个属性&#xff0c;它们以键值对的形式存在&#xff0c;并用逗号隔开。 JSP中的三种…

基于docker创建的Jenkins,settings.xml文件放在哪里

如果运行容器时挂载目录如下 启动容器 docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privilegedtrue --restartalways -v /home/jenkins_home:/var/jenkins_home jenkins/jenkins:latest 则需要将开发给的settings.xml文件中的localRepository路径改为容器中…

[Leedcode][JAVA][第139题][单词拆分][递归][记忆优化][动态规划]

【问题描述】[中等] 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明&#xff1a;拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1&#xff1a;输入: s …

HDU-4278 Faulty Odometer 数学递推 || 八进制

题意 这个里程表当走到3或8的时候就会跳过 给我们这个里程表上显示的数字 让我们求这个里程表的真实数据是多少 分析 由于 3 和 8 不存在 那么就相当于一个八进制数 但是这个八进制中3 是写作4 8是写作9 那么就好写了 也就是把数入的“特别八进制数”转化成一个十进制数 …

22.jsp动作元素

JSP 动作元素 与JSP指令元素不同的是&#xff0c;JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。 利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。 动作元素只有一种语法&#xff0c;它符合XML标…

Centos7.5 lnmp+mongodb扩展

安装NginxYUM源中没有Nginx&#xff0c;我们需要增加一个nginx的源nginx.repo # vi /etc/yum.repos.d/nginx.repo 源文件的内容 [nginx] namenginx repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck0 enabled1 安装成功后&#xff0c;就可以直接…

[剑指offer][JAVA]面试题第[33]题[二叉搜索树的后序遍历][单调栈][递归分治]

【问题描述】[中等] 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树&#xff1a;5/ \2 6/ \1 3 示例 1&#xff1a;输入: [1,…

23.JSP 隐式对象

JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象&#xff0c;开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。 JSP所支持的九大隐式对象&#xff1a; 对象描述requestHttpServletRequest 接口的实例responseHttpServletResponse 接口的…

Trie总结

Trie 树即为字典树 这个树可以把所有我们要在文本中所查询的前缀都记录下来 当我们拿到一个文本串 需要从里面找出所有前缀串的数目我们就可以用这个结构 拿着我们的文本到这个树里面走一走就得到有多少个前缀了 我们来看 当我们拿到一个前缀 不断地把这个前缀插入到树中 对每…

运用begin和end截取值

程序员在取值的时候会面临截取某一个值&#xff0c;前段时间在大佬那里学习了一个js取值&#xff0c;在<c:forEach items"${potcontestlist}" var"oldcontest1" begin"0" end"3">取值中如果需要截取某个值加begin先取第一个值的…

[程序员面试金典][JAVA][第02.01题][移除重复节点][Set][双指针]

【问题描述】[简单] 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入&#xff1a;[1, 2, 3, 3, 2, 1]输出&#xff1a;[1, 2, 3] 示例2:输入&#xff1a;[1, 1, 1, 1, 2]输出&#xff1a;[1, 2] 提示&#xff1a;链表长度在[0, 20000]范围…

24.JSP 客户端请求

JSP 客户端请求 当浏览器请求一个网页时&#xff0c;它会向网络服务器发送一系列不能被直接读取的信息&#xff0c;因为这些信息是作为HTTP信息头的一部分来传送的。您可以查阅HTTP协议来获得更多的信息。 下表列出了浏览器端信息头的一些重要内容&#xff0c;在以后的网络编…

25.二维码简介

1二维码概述 2二维码 3二维码 二维码概念 二维码发展历史 二维码分类 二维码优缺点 QR code

HDU-1251 统计难题 map写法

#include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<map> using namespace std;map<string,int>n; char a[12]; int main() {while(*gets(a)){// 不断读入一个串 直到读空就退出来了n[a];for(int istrlen(a…