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

【问题描述】[中等]

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

【解答思路】

BFS

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

class Solution {public int[] levelOrder(TreeNode root) {if(root == null) return new int[0];// Queue<TreeNode> queue=  new LinkedList<>();//queue.add(root);Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};ArrayList<Integer> ans = new ArrayList<>();while(!queue.isEmpty()) {TreeNode node = queue.poll();ans.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}int[] res = new int[ans.size()];for(int i = 0; i < ans.size(); i++)res[i] = ans.get(i);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-lcof/solution/mian-shi-ti-32-i-cong-shang-dao-xia-da-yin-er-ch-4/

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

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

相关文章

HDU 4403 A very hard Aoshu problem DFS

problem statement 这道题给我们一个不超过15位的整数 让我们在其中加等号或者加号 如果加完符号后符合计算结果 那么计数 最后输出所有的情况 problem analysis 这道题其实就是想办法遍历所有情况 把合法的记录下来 最终输出就得到解 如何枚举呢 我们可以枚举等号的位置…

计算机网络考试题库

计算机网络考试题库 第一章 一、单项选择题 1、计算机网络可以被理解为&#xff08; B &#xff09; A.执行计算机数据处理的软件模块 B.由自治的计算机互联起来的集合体 C.多个处理器通过共享内存实现的紧耦合系统 D.用于共同完成一项任务的分布式系统 2、计算机网络最基本的功…

《深入理解Java虚拟机》读书笔记一

第二章 Java内存区域与内存溢出异常 1、运行时数据区域 程序计数器&#xff1a; 当前线程所执行的字节码的行号指示器&#xff0c;用于存放下一条需要运行的指令。运行速度最快位于处理器内部。线程私有。虚拟机栈&#xff1a; 描述的是Java方法执行的内存模型&#xff0c;用于…

[Leedcode][JAVA][第16题][最接近的三数之和][双指针][数组]

【问题描述】[中等] 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&…

LIS 的 n*log 算法 ———二分维护

upper_bound只会替换让留在数组里的最长递增子序列尽可能小 由于upper查出来的结果下标是那个可以插入这个值得最后一个元素 所以他会把大的数变成小的数 upper将可以替换成新元素的元素替换成更小的 将不能替换的元素 大的元素直接放在最后面 很神奇 你会发现 这个问题 …

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

【问题描述】[简单] 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其层次遍历结果&#xff1a;[[3],[9,20],[15,7] ]【解答思路】 层次遍历 BFS 时…

爬虫入门-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;就可以直接…