剑指Offer-按之字形顺序打印二叉树

package Tree;import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;/*** 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。* 思路:* 先按层次输出二叉树* 判断奇数层和偶数层* 反转arrayList*/
public class Solution9 {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};Solution9 Solution9 = new Solution9();TreeNode treeNode = Solution9.createBinaryTreeByArray(array, 0);for (ArrayList list :Solution9.Print(treeNode)) {System.out.println(list);}}/*** 之字形打印二叉树* 用reserve反转,时间复杂度高** @param pRoot* @return*/public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {//arrayLists存储结果ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();if (pRoot == null) {return arrayLists;}ArrayList<Integer> arrayList = new ArrayList<>();//使用队列,先进先出Queue<TreeNode> queue = new LinkedList<>();queue.add(pRoot);int start = 0;int end = 1;boolean leftToRight = true;while (!queue.isEmpty()) {TreeNode temp = queue.remove();//添加到本行的arrayListarrayList.add(temp.val);start++;//每打印一个节点,就把此节点的下一层的左右节点加入队列,并记录下一层要打印的个数if (temp.left != null) {queue.add(temp.left);}if (temp.right != null) {queue.add(temp.right);}if (start == end) {start = 0;end = queue.size();if (leftToRight) {arrayLists.add(arrayList);} else {arrayLists.add(reverse(arrayList));}leftToRight = !leftToRight;arrayList = new ArrayList<>();}}return arrayLists;}/*** 反转** @param arrayList* @return*/private ArrayList<Integer> reverse(ArrayList<Integer> arrayList) {ArrayList<Integer> arrayList1 = new ArrayList<>();for (int i = arrayList.size() - 1; i >= 0; i--) {arrayList1.add(arrayList.remove(i));}return arrayList1;}public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}/*** 数据转二叉树** @param array* @param index* @return*/private TreeNode createBinaryTreeByArray(int[] array, int index) {TreeNode tn = null;if (index < array.length) {int value = array[index];tn = new TreeNode(value);tn.left = createBinaryTreeByArray(array, 2 * index + 1);tn.right = createBinaryTreeByArray(array, 2 * index + 2);return tn;}return tn;}
}

转载于:https://www.cnblogs.com/wupeixuan/p/8623436.html

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

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

相关文章

android 自定义相机,Camera,相机遮罩层

实现效果&#xff1a; 实现方法&#xff1a;一个自定义view实现demo 一、自定义相机Camera&#xff0c;无API版本限制 &#xff08;1&#xff09;。实现接口 implements SurfaceHolder.Callback private SurfaceView mView;private Camera mCamera; private int cameraId 0;/…

RedisTemplate在项目中的应用

RedisTemplate在项目中的应用 如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo&#xff0c;看 RedisTemplate 的使用。 主要用到地方&#xff1a;视频首页轮播图的获取&#xff0c;以及搜索检索界面&#xff0c;如下图所示&#xff1a; 由于是非maven非sp…

Android 蓝牙开发,搜索蓝牙列表,蓝牙连接,蓝牙通讯

申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name"android.permission.BLUETOOTH" /> <uses-permission android:name"android.permission.BLUETOOTH_ADMIN" />private final int BLUE_REQUEST_CODE 551; public void s…

jeecg uedit 自定义图片上传路径

jeecg uedit 图片上传配置自定义物理路径&#xff0c;简单描述&#xff1a;我们知道 jeecg 中使用的 uedit 默认图片上传路径为 “当前项目\plug-in\ueditor\jsp\uploadx\日期\图片.png”&#xff0c;但是把图片放在项目中显然是很不友好的&#xff0c;所以我们自定义上传路径。…

OpenFileDialog 打开文件对话框

InitialDirectory 对话框的初始目录 Filter 要在对话框中显示的文件筛选器&#xff0c;例如&#xff0c;"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" FilterIndex 在对话框中选择的文件筛选器的索引&#xff0c;如果选第一项就设为1 RestoreDirectory 控制对话框在关…

了解一下Elasticsearch的基本概念

了解一下Elasticsearch的基本概念 一、前文介绍 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Apache Lucene(TM)的开源搜索引擎&#xff0c;无论在开源还是专有领域&#xff0c;Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。注意&#x…

简单的对象定位与登录实例的简单操作

①元素对应的定位方法&#xff1a; ②登录实例&#xff08;暂不考虑验证环节&#xff09; 注意&#xff1a;在实践过程中出现过&#xff0c;密码输入之后又被清空的情况&#xff0c;应该是被处理过&#xff0c;换个别的简单的登录界面试下看看如果没有出现前面所说的情况&#…

Didn‘t find class “android.view.View$OnUnhandledKeyEventListener“,Didn‘t find class “androidx

Android 新导入的项目&#xff0c;报错&#xff1a; java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rikkathewrold.rikkamusic/com.rikkathewrold.rikkamusic.login.mvp.view.SelectLoginActivity}: java.lang.IllegalStateException: Only fullscr…

百度OCR文字识别API使用心得 com.baidu.ocr.sdk.exception.SDKError[283604]

百度OCR文字识别API使用心得 com.baidu.ocr.sdk.exception.SDKError[283604] 本文转载自好基友upuptop&#xff1a;https://blog.csdn.net/pyfysf/article/details/77455330 效果图&#xff1a; 如下为文章正文&#xff1a; 最近有个小项目使用到了OCR技术&#xff0c;顺便到网…

Android studio ERROR: Software caused connection abort: recv failed 解决方法

使用Android studio打开kotlin项目时报错&#xff1a;ERROR: Software caused connection abort: recv failed 解决方法&#xff1a;修改三个文件即可 1、修改gradle-wrapper.properties 修改为当前Android studio的gradle版本 2、修改项目build.gradle 修改为当前Android st…

VSCode.exe扩展主机意外终止。请重新加载窗口以恢复。

删除D:\Program Files (x86)\Microsoft VS Code\resources\app\extensions\git这个文件夹(根据每个人安装目录的不同而不同) 问题的起因貌似是git没有安装在C盘就会导致VSCode找不到git.exe的路径&#xff0c;从而报错。转载于:https://www.cnblogs.com/fhldbk/p/8629379.html

Android获取手机联系人或通讯录的基本信息(如姓名、电话)

1、添加权限 <uses-permission android:name"android.permission.READ_CONTACTS"/> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.READ_EXTERNAL…

百度OCR文字识别-Android安全校验

百度OCR文字识别-Android安全校验 本文转载自好基友upuptop&#xff1a;https://blog.csdn.net/pyfysf/article/details/86438769 效果图&#xff1a; 如下为文章正文&#xff1a; 百度OCR接口使用总结&#xff1a;之前总结一下关于百度OCR文字识别接口的使用步骤&#xff08;…

springboot下整合各种配置文件

本博是在springboot下整合其他中间件&#xff0c;比如&#xff0c;mq&#xff0c;redis&#xff0c;durid&#xff0c;日志。。。等等 以后遇到再更。springboot真是太便捷了&#xff0c;让我们赶紧涌入到springboot的怀抱吧。 application.yml server:port: 8080 spring:#pro…

Android vector矢量图应用实例

在drawable文件夹下创建vector.xml文件 <?xml version"1.0" encoding"utf-8"?> <vector xmlns:android"http://schemas.android.com/apk/res/android"android:height"64dp"android:width"64dp"android:viewpo…

javaweb引用serverlet库

报错提示&#xff1a;The type javax.servlet.http.HttpServletRequest cannot be resolved.解决方法如下&#xff1a;1.工程右键-properties->java build path 2.在java build path的libraries tab页中选择Add external Jars...按钮 3. 选择eclipse的安装目录&#xff0c;我…

Lint found fatal errors while assembling a release target

在打包APK时报错&#xff1a;Lint found fatal errors while assembling a release target Android在debug模式下应用没有问题&#xff0c;但是在打包release版本时出现一下问题&#xff1a; 解决方法&#xff1a; 1、打开app下build文件夹下reports文件夹下的lint-results-rel…