代码随想录:二叉树18(Java)

目录

105.从前序与中序遍历序列构造二叉树

题目

代码

106.从中序与后序遍历序列构造二叉树

题目

代码


105.从前序与中序遍历序列构造二叉树

题目

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

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

代码(递归)

class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {if(preorder.length == 0 || inorder.length == 0){return null;}return build(inorder,0,inorder.length-1,preorder,0,preorder.length-1);}//左闭右闭public TreeNode build(int[] in,int in1,int in2,int[] pre,int pre1,int pre2){//终止条件if(pre1 > pre2 || in1 > in2){return null;}int rootval = pre[pre1]; //根节点是前序的第一个节点TreeNode root = new TreeNode(rootval); //创建根节点//获取前序的第一个节点在中序的索引int index = 0;for(int i=in1;i <= in2;i++){if(in[i] ==rootval){index = i;}}//切分中序区间int a1 = in1;  //中序左边开始int a2 = index - 1; //中序左边结束int a3 = index + 1;  //中序右边开始int a4 = in2;  //中序右边结束//切分前序区间int b1 = pre1 + 1;  //前序左边开始int b2 = b1 + (a2 - a1); //前序左边结束int b3 = b2 + 1; //前序右边开始int b4 = pre2;  //前序右边结束root.left = build(in,a1,a2,pre,b1,b2);root.right = build(in,a3,a4,pre,b3,b4);return root;}
}

106.从中序与后序遍历序列构造二叉树

题目

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

示例 1:

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

代码

class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {if(inorder.length == 0){return null;}return build(inorder,0,inorder.length-1,postorder,0,postorder.length-1);}//左闭右闭public TreeNode build(int[] in,int in1,int in2,int[] post,int post1,int post2){//终止逻辑if(post1 > post2 || in1 > in2){return null;}//单层逻辑int rootval = post[post2]; //根节点是post后序的最后一个节点TreeNode root = new TreeNode(rootval);  //创建根节点int index = 0;//在中序in中找到rootval的下标for(int i=in1;i <= in2;i++){if(in[i] == rootval){index = i;break;}}//a是中序区间int a1 = in1; //中序左边的开始int a2 = index - 1;  //中序左边的结束int a3 = index + 1;  //中序右边的开始int a4 = in2; //中序右边的结束//b是后序区间int b1 = post1;   //后序左边的开始int b2 = post1 + (a2 - a1); //后序左边的结束int b3 = b2 + 1;  //后序右边的开始int b4 = post2 - 1; //后序右边的结束//递归左孩子root.left = build(in,a1,a2,post,b1,b2);//递归右孩子root.right = build(in,a3,a4,post,b3,b4);return root;}
}

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

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

相关文章

企业网络安全的全方位解决方案

从安全域划分到云端管理&#xff0c;全面构建企业网络安全防线 在数字化浪潮席卷全球的今天&#xff0c;企业网络安全已经成为商业运营中不可忽视的一部分。随着企业数字资产价值的不断攀升&#xff0c;网络安全挑战也愈发严峻。数据泄露、勒索病毒、挖矿木马等高危风险频繁发…

利用Django中的缓存系统提升Web应用性能

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在构建现代Web应用时&#xff0c;性能通常是至关重要的考虑因素之一。为了提高用户体验和应…

Java-基础知识-包-重命名文件/目录

在 IntelliJ IDEA 或其他 Java IDE 中&#xff0c;当你遇到“Package name does not correspond to file path”这样的错误提示时&#xff0c;它意味着你的源代码文件所在的目录结构与其声明的包名&#xff08;package name&#xff09;不匹配。这通常是由于以下几个原因造成的…

Linux中V4L2使用

Video for Linuxtwo(Video4Linux2)简称V4L2&#xff0c;是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口&#xff0c;配合适当的视频采集设备和相应的驱动程序&#xff0c;可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和…

设计模式(六):原型模式

设计模式&#xff08;六&#xff09;&#xff1a;原型模式 1. 原型模式的介绍2. 原型模式的类图3. 原型模式的实现3.1 创建一个原型接口3.2 创建具体原型3.3 创建一个数据缓存类3.4 测试 1. 原型模式的介绍 原型模式&#xff08;Prototype Pattern&#xff09;属于创建型模式&…

人工智能(AI)与地理信息技术(GIS)的融合:开启智能地理信息时代

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;和地理信息技术&#xff08;GIS&#xff09;的应用越来越广泛&#xff0c;两者的结合更是为许多行业带来了前所未有的变革。本文将以“人工智能&#xff08;AI&#xff09;地理信息技术&#xff08;GIS&#…

【八股】Spring篇

why Spring? 1.使用它的IOC功能&#xff0c;在解耦上达到了配置级别。 2.使用它对数据库访问事务相关的封装。 3.各种其他组件与Spring的融合&#xff0c;在Spring中更加方便快捷的继承其他一些组件。 IoC和DI &#x1f449;IOC是Inversion of Control的缩写&#xff0c;“…

NLP Java - 中文分词

文章目录 IK Analyzer : https://github.com/EugenePig/ik-analyzer-solr5Ansj : https://github.com/NLPchina/ansj_segMMSeg4J : https://github.com/chenlb/mmseg4j-corejcseg : https://gitee.com/lionsoul/jcsegICTCLAS : https://github.com/NLPIR-team/nlpir-analysis-c…

德语口语学习的8种练习方法

简洁明了一点&#xff0c;方便大家理解&#xff0c;我总结了以下8点&#xff1a; 1.模拟对话&#xff1a; 创造实际生活场景&#xff0c;例如购物、问路、餐厅点餐等&#xff0c;并自言自语或者与伙伴一起模拟这些对话。 参加角色扮演活动&#xff0c;通过不同情境练习口语。…

文末送资料|跟着开源学技术-ChatGPT开源项目-chatgpt-java

目录 功能特性 最简使用 进阶使用 函数调用&#xff08;Function Call&#xff09; 流式使用 流式配合Spring SseEmitter使用 多KEY自动轮询 大家好&#xff0c;我是充电君 今天带着大家来看个Java版本的ChatGPT。这个开源项目就是chatgpt-java。 Github&#xff1a; h…

Django与mysqlclient链接不成功

先检查自己的python是什么版本&#xff0c;是64位还是32位&#xff0c;这个自己去网上查。 我的是32位的&#xff0c;因为直接pip下载不了&#xff0c;网上也没有32位的whl&#xff0c;所以卸载重装一个64位的3.9.6的python 网上直接搜mysqlclient&#xff0c;找到对应py39也…

Excel vlookup函数的使用教程 和 可能遇到的错误解决方法

使用VLOOKUP示例 被查询的表格 表一 A列B列C列A1aB2bC3c 要匹配的列 表二 F列G列H列ACBDA 要G列匹配字母&#xff0c;H列匹配数字 G 使用公式VLOOKUP(F5,A:D,3,0) 参数说明 F5 是表二 F列第五行的A A:D表是要匹配的数据列表在A到D列&#xff0c;就是表一 &#xff08;注意…

android13 RK356X 预装第三方apk失败

RK356X android13 预安装第三方apk失败比如chrome浏览器_android13安装apk-CSDN博客 我试了一下&#xff0c;按照之前的常规方式集成apk&#xff0c;只有签名事业系统签名才可以集成进去&#xff0c;如果使用PRESIGNED&#xff0c;apk只会打包的到系统中&#xff0c;并没有安装…

什么样的汽车制造供应商管理平台 可以既高效又安全?

汽车制造供应商管理是汽车制造商最基础的工作项&#xff0c;因为在汽车制造环节&#xff0c;与供应商间存在着必不可少又高频的业务往来&#xff0c;而在汽车制造供应商之间&#xff0c;文件往来是确保业务顺利进行、沟通协作和质量控制的重要环节。这些文件往来涵盖了多个方面…

网络爬虫之爬虫原理

** 爬虫概述 Python网络爬虫是利用Python编程语言编写的程序&#xff0c;通过互联网爬取特定网站的信息&#xff0c;并将其保存到本地计算机或数据库中。 """ 批量爬取各城市房价走势涨幅top10和跌幅top10 """ ​ from lxml import etree impor…

通过本机端口映射VMware中虚拟机应用(例如同一局域网别人想远程连接你虚拟机中的数据库)

需要 虚拟机中安装一下达梦数据库&#xff0c;并且以后大家都连接你虚拟机中达梦数据库进行开发。。。。。。在不改动自己虚拟机配置&#xff0c;以及本地网卡任何配置的情况下如何解决&#xff1f;本虚拟机网络一直使用的NAT模式。 解决 找到NAT设置添加端口转发即可解决。…

高级IO—多路转接

&#x1f3ac;慕斯主页&#xff1a; 修仙—别有洞天 ♈️今日夜电波&#xff1a;Cupid - Twin Ver. (FIFTY FIFTY) - Sped Up Version 0:20━━━━━━️&#x1f49f;──────── 2:25 &#x1f504; …

【FFmpeg】视频与图片互相转换 ( 视频与 JPG 静态图片互相转换 | 视频与 GIF 动态图片互相转换 )

文章目录 一、视频与 JPG 静态图片互相转换1、视频转静态图片2、视频转多张静态图片3、多张静态图片转视频 二、视频与 GIF 动态图片互相转换1、视频转成 GIF 动态图片2、 GIF 动态图片转成视频 一、视频与 JPG 静态图片互相转换 1、视频转静态图片 执行 ffmpeg -i input.mp4 …

《浪潮之巅》:时代的巨轮与公司的兴衰

《浪潮之巅》是一部引人深思的作品&#xff0c;作者吴军通过对AT&T等公司的兴衰历程的叙述&#xff0c;展现了在科技浪潮之巅&#xff0c;公司如何成长、兴盛&#xff0c;并最终可能面临困境或转型。读完这部作品&#xff0c;我对公司的发展、企业经营者的战略眼光以及硅谷…

linux-1-shell

shell脚本&#xff08;本文以Bash为基础&#xff09; 要特别注意空格&#xff01;&#xff01;&#xff01; shell一般用于数据的导入导出、文本传输、作业调度 只有单行注释 shell大多数命令可以直接在linux内运行在shell脚本中写入代码时要先写入 #!/bin/bash #! 告诉系统其…