二叉树的构造

二叉树的构造(前后序用来确定根的位置,中用来划分左右子树

最大二叉树(递归要先写终止条件 终止条件 终止条件

每次找最大的结点为分界点以及根节点,左边构成左子树,右边构成右子树,递归

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return build(nums,0,nums.length-1);}TreeNode build(int[] nums,int left,int right){if(left>right) return null;int index=-1,maxVal=Integer.MIN_VALUE;for(int i=left;i<=right;i++){if(nums[i]>maxVal){maxVal=nums[i];index=i;}}TreeNode root=new TreeNode(maxVal);root.left=build(nums,left,index-1);root.right=build(nums,index+1,right);return root;}
}

通过前序和中序遍历结果构造二叉树

关键点在于找到左子树的数量 ,可以用hashmap保存inorder的映射,提高效率

主要就是pre 和in 的start和end,以及leftsize

写代码时不能用具体数值,要用形参,因为是递归,所以 用形参来放入即可

        

class Solution {Map<Integer,Integer> map=new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i=0;i<inorder.length;i++){map.put(inorder[i],i);//创建映射方便查找索引}return build(preorder,0,preorder.length-1,inorder,0,inorder.length-1);}TreeNode build(int[] preorder,int preStart,int preEnd,int[] inorder,int inStart,int inEnd){if(preStart>preEnd) return null;int val=preorder[preStart];//这里不能用0!TreeNode root=new TreeNode(val);int index=map.get(val);int leftSize=index-inStart;root.left=build(preorder,preStart+1,preStart+leftSize,inorder,inStart,index-1);root.right=build(preorder,preStart+leftSize+1,preEnd,inorder,index+1,inEnd);return root;}
}

用根节点来当分界点,所以index为根节点

class Solution {Map<Integer,Integer> map=new HashMap<>();public TreeNode buildTree(int[] inorder, int[] postorder) {for(int i=0;i<inorder.length;i++){map.put(inorder[i],i);//创建中序遍历的映射}return build(inorder,0,inorder.length-1,postorder,0,postorder.length-1);}public TreeNode build(int[] inorder,int inStart,int inEnd,int[] postorder,int poStart,int poEnd){if(inStart>inEnd) return null;int val=postorder[poEnd];TreeNode root=new TreeNode(val);int index=map.get(val);int leftSize=index-inStart;root.left=build(inorder,inStart,index-1,postorder,poStart,leftSize+poStart-1);root.right=build(inorder,index+1,inEnd,postorder,poStart+leftSize,poEnd-1);return root;}
}

class Solution {Map<Integer,Integer> map=new HashMap<>();public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {for(int i=0;i<postorder.length;i++){map.put(postorder[i],i);//后序遍历的映射}return build(preorder,0,preorder.length-1,postorder,0,postorder.length-1);}public TreeNode build(int[] preorder,int preStart,int preEnd,int[] postorder,int poStart,int poEnd){if (preStart > preEnd) {return null;}if (preStart == preEnd) {return new TreeNode(preorder[preStart]);//防止数组越界!}int val=preorder[preStart];TreeNode root=new TreeNode(val);int leftVal=preorder[preStart+1];int index=map.get(leftVal);int leftSize=index-poStart+1;root.left=build(preorder,preStart+1,preStart+leftSize,postorder,poStart,index);root.right=build(preorder,preStart+leftSize+1,preEnd,postorder,index+1,poEnd-1);return root;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】Docker-harbor私有仓库部署与管理

目录 一.Harbor 概述 1.什么是Harbor 2.Harbor的特性 3.Harbor的构成 二.Harbor 部署 1.部署 Docker-Compose 服务 2.部署 Harbor 服务 3.启动 Harbor 4.创建新项目 5.创建用户 6.本地上传镜像 7.从Harbor下载镜像 三.镜像同步 1.定时拉取 2.主动推送 四.管理 …

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说&#xff1a;“屏幕不够&#xff0c;滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不&#xff0c;从 SwiftUI 5.0&#xff08;iOS 17&#xff09;开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…

双向链表_代码实现

代码实现的专题&#xff1a;只有手撕代码&#xff1a;&#xff09;&#xff0c;附上重点注释&#xff1b;重要的环节&#xff0c;会配上相应的调试截图与运行截图 。 总之&#xff0c;重点在代码&#xff0c;关于基础理论部分&#xff1a;&#xff08;还在写&#xff09; 定义…

Python数据可视化之numpy的11个常用的创建数组的函数

numpy库 在处理成千上万的数据时&#xff0c;Python的1维列表已经不适合来对数据进行处理&#xff0c;效率会很慢&#xff0c;所以numpy就诞生了&#xff0c;他可以将列表变成数组&#xff0c;而数组可以是1维、2维、3维甚至更高纬度&#xff0c;可用于存储和处理大型的矩阵&a…

js | Core

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ Object 是什么&#xff1f; 属性[[prototype]]对象。 例如&#xff0c;下面的&#xff0c;son是对象&#xff0c;foo不是对象。打印出来的son&#xff0c;能看到有一个prototype 对象。 prototype vs _proto_ v…

Kafka消息队列python开发环境搭建

目录 引言 Kafka 的核心概念和组件 Kafka 的主要特性 使用场景 申请云服务器 安装docker及docker-compose VSCODE配置 开发环境搭建 搭建Kafka的python编程环境 Kafka的python编程示例 引言 Apache Kafka 是一个分布式流处理平台&#xff0c;由 LinkedIn 开发并在 2…

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决&#xff1a;WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武…

Word文档恢复竟然这么简单?3个推荐方案送上!

“我很喜欢用Word进行文字创作&#xff0c;可是我有一次重新打开我的Word文档&#xff0c;却显示文档已丢失&#xff0c;这该怎么办呢&#xff1f;凝聚我多年心血的文章还有可能恢复吗&#xff1f;” 不论是总结学习内容还是汇报工作成果&#xff0c;我们总会用上Word。Word作…

level 6 day2 网络基础2

1.socket&#xff08;三种套接字&#xff1a;认真看&#xff09; 套接字就是在这个应用空间和内核空间的一个接口&#xff0c;如下图 原始套接字可以从应用层直接访问到网络层&#xff0c;跳过了传输层&#xff0c;比如在ubtan里面直接ping 一个ip地址,他没有经过TCP或者UDP的数…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据&#xff0c;导致JSON数据大小过大&#xff0c;带宽大小不足&#xff0c;导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小&#xff0c;从而提高传输效率 服务器端压缩 springboot项目配置application文件&#xff0c;通过…

不懂U盘文件恢复?学会这4个方法点亮技能点!

“向广大网友求助&#xff1a;U盘里的文件意外删除了还有机会恢复吗&#xff1f;工作的时候不小心删除了存储在U盘里的重要文件&#xff0c;撤销也恢复不了&#xff0c;我还有其他的办法吗&#xff1f;” 相信大家在日常生活中&#xff0c;为了储存和随时携带重要的文件信息&a…

第5章 单片机的中断系统

5.1 中断的概念 5.2 中断控制系统 5.3 中断处理过程 5.4 中断的编程及应用举例 5.1 中断的概念 日常生活的中断现象举例 中断是指在突发事件到来时先中止当前正在进行的工作&#xff0c;转而去处理突发事件。待处理完成后&#xff0c;再返回到原先被中止的工作处&#xff…

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术&#xff1a;探索Flutter的Provider库 前言 上一篇文章中&#xff0c;我们详细介绍了 Flutter 应用中的状态管理&#xff0c;以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式&#xff1a;Provider。 Provider优缺点 基…

【论文速读】| 涟漪下的漩涡:对启用RAG的应用程序的实证研究

本次分享论文&#xff1a;Vortex under Ripplet: An Empirical Study of RAG-enabled Applications 基本信息 原文作者&#xff1a;Yuchen Shao, Yuheng Huang, Jiawei Shen, Lei Ma, Ting Su, Chengcheng Wan 作者单位&#xff1a;East China Normal University, The Unive…

JVM基本知识——运行空间

JVM&#xff08;Java Virtual Machine&#xff09;即Java虚拟机&#xff0c;是负责读取java字节码&#xff0c;并在实际的硬件环境中运行。 JVM可以分为三部分&#xff1a;类装载器&#xff08;ClassLoader&#xff09;子系统、内存空间、执行引擎 内存空间&#xff08;运行时…

高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法

一、引言 近年来&#xff0c;人工智能技术在全球范围内迅速发展&#xff0c;对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地&#xff0c;肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求&#xff0c;高职院校需要构建一套科学、…

【STC89C51单片机】定时器/计数器的理解

目录 定时器/计数器1. 定时器怎么定时简单理解&#xff08;加1经过了多少时间&#xff09;什么是时钟周期什么是机器周期 2.如何设置定时基本结构相关寄存器1. TMOD寄存器2. TCON寄存器 代码示例 定时器/计数器 STC89C51单片机的定时器和计数器&#xff08;Timers and Counter…

基于STM32老人摔倒报警设计

1.简介 随着我国老年人人口不断上升&#xff0c;我国已经进入人口老龄化&#xff0c;老龄人的人数加剧随着而来的就是基本的健康安全问题成为了如今社会主要解决的问题。随着已经步入信息时代&#xff0c;为了解决老年人的健康问题&#xff0c;相关技术的使用已经成为一个热门话…

JVM高频面试点

文章目录 JVM内存模型程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 Java对象对象的创建如何为对象分配内存 对象的内存布局对象头实例数据对齐填充 对象的访问定位 垃圾收集器找到垃圾引用计数法可达性分析&#xff08;根搜索法&#xff09; 引用概念的扩充回收方…

COD论文学习 ZoomNext

现有方法的不足之处 高内在相似性&#xff1a;伪装物体与背景之间的高内在相似性使得检测变得困难&#xff0c;现有方法难以准确区分二者。多样化的规模和模糊的外观&#xff1a;伪装物体在规模和外观上多样化&#xff0c;且可能严重遮挡&#xff0c;导致现有方法难以处理。不…