剑指 Offer 32 . 从上到下打印二叉树

main函数测试代码:

按标准输入输出,比如输入:
3,9,20,null,null,15,7

	public static void main(String[] args) {//输入3,9,20,null,null,15,7Scanner sc = new Scanner(System.in);String s = sc.nextLine();String[] split = s.split(",");TreeNode root = null;if( split.length!=0){root = new TreeNode(Integer.parseInt(split[0]),null,null);Queue<TreeNode> queue = new LinkedList<>();queue.add(root);for (int i = 1; i < split.length; i++) {TreeNode node = queue.poll();if(!split[i].equals("null")) {//String重写了equals方法,比较的是内容是否相等node.left = new TreeNode(Integer.parseInt(split[i]), null, null);queue.add(node.left);}else {node.left = null;}i++;if(i < split.length && !split[i].equals("null")) {node.right = new TreeNode(Integer.parseInt(split[i]), null, null);queue.add(node.right);}else {node.right = null;}}}//调用函数System.out.println(levelOrderII(root).toString());}

剑指 Offer 32 - I. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

/*** 剑指 Offer 32 - I. 从上到下打印二叉树* 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。*/public static int[] levelOrderI(TreeNode root) {if(root==null){return new int[0];}Queue<TreeNode> queue = new LinkedList<>();queue.add(root);ArrayList<Integer> list = new ArrayList<>();while(!queue.isEmpty()){TreeNode node = queue.remove();list.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}Integer[] arr = list.toArray(new Integer[list.size()]);int[] res = new int[arr.length];for(int i = 0; i < arr.length; i ++)res[i] = arr[i];return res;}

测试结果:

3,9,20,null,null,15,7
[3, 9, 20, 15, 7]

剑指 Offer 32 - II. 从上到下打印二叉树 II

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

/*** 剑指 Offer 32 - II. 从上到下打印二叉树 II* 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。*/public static List<List<Integer>> levelOrderII(TreeNode root) {List<List<Integer>> List = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if(root!=null){queue.add(root);}while (!queue.isEmpty()){List<Integer> row = new ArrayList<>();for (int i = queue.size(); i > 0; i--) {TreeNode node = queue.poll();row.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}List.add(row);}return List;}

测试结果:

3,9,20,null,null,15,7
[[3], [9, 20], [15, 7]]

如果你使用for (int i=0;i<queue.size(); i++) {}
测试结果:

3,9,20,null,null,15,7
[[3, 9], [20, 15], [7]]

明显就是错的,就是因为在程序还没有出for循环之前,queue.size()变大了。

还有一点要特别注意,不能使用

if(root==null){return null;}

这样当输入是[],即root=null的时候,输出是null,实际应该返回的是[]。

剑指 Offer 32 - III. 从上到下打印二叉树 III

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
思想:层序遍历 + 双端队列(奇偶层逻辑分离)

/*** 剑指 Offer 32 - III. 从上到下打印二叉树 III* 请实现一个函数按照之字形顺序打印二叉树,* 即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。*/public static List<List<Integer>> levelOrderIII(TreeNode root) {List<List<Integer>> List = new ArrayList<>();Deque<TreeNode> deque = new LinkedList<>();int level = 0;if(root != null){deque.addFirst(root);level = 1;}//可以利用链表的头结点和尾结点去理解双端队列的进出关系while (!deque.isEmpty()){List<Integer> row = new ArrayList<>();for (int i = deque.size(); i > 0; i--) {//奇数层if(level%2==1) {TreeNode node = deque.pollLast();row.add(node.val);if (node.left != null) {deque.addFirst(node.left);}if (node.right != null) {deque.addFirst(node.right);}}//偶数层if(level%2==0) {TreeNode node = deque.pollFirst();row.add(node.val);if (node.right != null) {deque.addLast(node.right);}if (node.left != null) {deque.addLast(node.left);}}}List.add(row);level++;}return List;}

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

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

相关文章

HTTP 头部解释

HTTP&#xff08;HyperTextTransferProtocol&#xff09;是超文本传输协议的缩写&#xff0c;它用于传送WWW方式的数据&#xff0c;关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求&#xff0c;请求头包含请求的方法、URI、协议…

剑指 Offer 52. 两个链表的第一个公共节点

剑指 Offer 52. 两个链表的第一个公共节点 输入两个链表&#xff0c;找出它们的第一个公共节点。 思想&#xff1a;双指针法&#xff0c;浪漫相遇 public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode pointA headA;ListNode pointB he…

Android 创世纪 第二天

第二天&#xff0c;google说&#xff0c;荒芜要被开垦&#xff0c;系统便运作了&#xff0c;它是linux。 --xxx 荒蛮大地就要变得肥沃&#xff0c;linux已经运行起来了。。。。 linux就不多讲了&#xff0c;这里只讲讲被google大刀阔斧改了内核后的linux。 第一天最后&#xff…

“.NET研究”谈谈C# 4.0新特性“缺省参数”的实现

C#4.0关于缺省参数的新特性&#xff0c;相信大家都不会陌生。所谓缺省参数&#xff0c;顾名思义&#xff0c;就是在声明方法的某个参数的时候为之指定一个默认值&#xff0c;在调用该方法的时候如果采用该默认值&#xff0c;你就无须指定该参数。和很多语言层面特性&#xff08…

IDEA查看源码时总是出现.class而不是.java源码(解决办法)

自己安装的JDK8里面就有源码&#xff0c;就是图中的src.zip&#xff0c;我还傻乎乎的跑去下。 我参考下面这个链接解决了这个问题&#xff1a; https://www.it610.com/article/1283023085871579136.htm 特别注意其中的一句话&#xff1a;把SDKs中多余的jdk删掉留一个就好&am…

ASP“.NET研究”.NET中的认证与授权

用户认证 .net提供了3种用户认证的方式&#xff0c;分别是Windows,Forms&#xff0c;Passport。这几种形式的定义可以在网站根目录下Web.config中的authentication节点中看见。Windows是默认的验证形式&#xff0c;它是根据机器的访问权限来判断的。Passport是微软提供的一种验…

针对资源管理器文件夹右键一直转圈圈卡死的问题

问题描述 每次打开资源管理器&#xff0c;文件夹右键就会一直转圈圈&#xff0c;转到资源管理器自动退出 解决方法 网上试了很多种方法&#xff0c;都没有解决我的问题&#xff0c;偶然在运行菜单里看到两个根本不是我装的疑似携带病毒类的软件&#xff0c;把他们都卸载之后…

用NuGet掌管你的Vi“.NET研究”sual Studio扩展

如果你使用Visual Studio 2010&#xff0c;那么 NuGet 可以使你的生活更加美好。当你项目里要引用到的一些库时候&#xff0c;比如JQuery 库或者 NHibernate, NUnit, log4net 你就可以考虑使用NuGet。它可以辅助你安装或者更新这些库。 当然我不得不继续说下去从安装到使用&…

cmd窗口使用python提示“Python not found”,可能是环境变量配置的原因

问题1 打开命令行窗口使用python命令无法直接进入python环境&#xff0c;但是从python的安装目录下就可以进去 问题原因 没有配置系统环境变量&#xff0c;需要把python安装路径添加到path环境变量中 环境变量配置&#xff0c;可以参考菜鸟教程 问题2 配置了环境变量之后…

vim 高亮显示php代码

vim是一款跨平台编辑器&#xff0c;可以在linux下使用&#xff0c;也可以在windows下使用高亮显示php代码 进入vim后&#xff0c;在普通模式下输入如下命令&#xff0c;开启php代码高亮显示 WwwChinazcom :syntax enable :source $VIMRUNTIME/syntax/php.vim转载于:https://w…

无法打开caffe.pb.h, no such file or directory错误

问题&#xff1a; 使用VS2013生成caffe解决方案的过程中&#xff0c;出现 无法打开caffe.pb.h&#xff0c;no such file or directory ,解决方案 &#xff1a; 参考博客&#xff1a;[caffe] 无法打开caffe.pb.h, no such file or directory错误 博客地址&#xff1a;https://b…

MusicXML 3.0 (20) - 钢琴踏板

<?xml version"1.0" encoding"UTF-8" standalone"no"?> <!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd"> <score-partwis…

NuGet Error:Unable to find version ‘0.3.3.0‘ of package ‘glog.overlay-x64_v120_Release_dynamic‘.

问题&#xff1a; 使用VS2013生成caffe解决方案时&#xff0c;报错NuGet Error:Unable to find version 0.3.3.0 of package glog.overlay-x64_v120_Release_dynamic. 解决方案&#xff1a; 一、参考文章里面的回答&#xff1a; 链接&#xff1a;NuGet error while buildin…

【caffe】找不到gpu/mxGPUArray.h

问题原因&#xff1a; Microsoft 的github貌似更新了matcaffe中的caffe_.cpp文件&#xff0c;第十六行添加了对gpu/mxGPUArray.h的引用 解决方法 是将本机Matlab的该文件夹复制到Caffe项目文件的对应位置。 具体方法 在你的matlab文件下面搜索mxGPUArray.h文件&#xff0c…

4 error C2220: 警告被视为错误 - 没有生成“object”文件 (..\..\src\caffe\util\math_functions.cpp)

在VS2013上编译caffe时遇到如下问题&#xff1a; 错误原因&#xff1a; 原因是该文件的代码页为英文&#xff0c;而我们系统中的代码页为中文。 解决方法&#xff1a; 将源码转化为正确的编码方式 用VS2013打开对应的文档&#xff0c;文件->打开->选择该cpp&#xff0…

技术人员如何转型为产品经理

技术人员如何转型为产品经理不知道是不是所有的公司开会都是这样&#xff0c;以时间长短作为衡量会议重要性的标准。周扬被郭姐姐叫去开会&#xff0c;9点半开始&#xff0c;直到快12点了&#xff0c;他才满脸愁容地回到办公室。放下笔记本&#xff0c;周扬站到办公室中间&…

错误 4 error C2220: 警告被视为错误 - 没有生成“object”文件

报错内容&#xff1a; 复制第一行的错误内容&#xff1a; 错误 4 error C2220: 警告被视为错误 - 没有生成“object”文件 D:\Program Files\NugetPackages\boost.1.59.0.0\lib\native\include\boost\format\alt_sstream_impl.hpp 1 1 libcaffe 复制会发现他给出了没有生成obje…

【转】 看IT人才最容易犯的17个错误

记得刚参加工作时&#xff08;那是97年&#xff09;&#xff0c;中国的IT刚刚兴起&#xff0c;那时&#xff0c;作为一个IT人士是一件很光荣的事&#xff0c;而那时的我正在做电气和电子相关的工作。99年第一次跳 槽&#xff0c;进入了IT行业做软件开发。至今&#xff0c;中国的…

未定义变量或函数caffe_()

该错误是使用matlab 运行classification_demo产生的 三要素仔细检查 一、添加系统环境变量 把 \caffe-master\Build\x64\Release添加到系统环境变量中 二、添加 Caffe 路径 打开 MATLAB&#xff0c;在命令窗口输入pathtool&#xff0c;添加 Caffe 路径&#xff0c;主要是添…

围观窗体与组件03 - 零基础入门学习Delphi25

围观窗体与组件03 让编程改变世界 Change the world by program 围观按钮型组件 Button、BitBtn、SpeedButton的一些区别 区别一&#xff1a;Button 不能显示位图 区别二&#xff1a;SpeedButton 没有焦点&#xff0c;一般用于工具栏按钮 区别三&#xff1a;BitBtn 有 kind…