phpmysql动态网站开发从入门到精通/软件开发培训机构去哪个学校
文章目录
- 题目
- 方法一:递归
题目
方法一:递归
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
首先根据 preorder 找到根节点是 3然后根据根节点将 inorder 分成左子树和右子树
左子树
inorder [9]右子树
inorder [15,20,7]这时候3是根节点
3的左子树为如下
preorder[9] 3的右子树为如下preorder[20 15 7] 现在我们只需要构造左子树和右子树即可,成功把大问题化成了小问题
然后重复上边的步骤继续划分,直到 preorder 空,返回 null 即可
解题的关键在与找根节点和 左子树和右子树在前序遍历数组的范围,一步步找出根节点,然后划分出左右子树,然后让根节点指向左右子树,然后又对左右子树左重复动作
这个根据前序遍历的第一个节点(根节点)去中序遍历中找左右子树的范围,可以根据前序遍历的根节点值循环去中序遍历中找,因为题目保证节点不存在重复,所以可以根据中序遍历维护一个节点和下标的哈希表,这个前序遍历的根节点,可以轻松的找到中序遍历的根节点,从而在前序遍历中确定左右子树的范围
- 根据中序遍历维护一个key为节点,value为下标的哈希表
- 根据前序遍历的第一个节点(也就是根节点)去中序遍历哈希表找根节点
- 再根据哈希表中找到的根节点,在中序遍历找到左子树的区间
- 再根据这个区间,去前序遍历找到左子树的范围,以及右子树的范围
- 新建根节点,指向待处理的左子树和右子树(递归)
// 方法一 : 递归+哈希(到中序遍历数组中找 根节点值 然后判断出左右子树,再根据前序构建树)Map<Integer,Integer> inorderMap = new HashMap<>(); //记录中序遍历节点与数组下标的映射关系public TreeNode buildTree(int[] preorder, int[] inorder) {//中序遍历数组下标映射map构造for(int i = 0 ; i<inorder.length;i++){inorderMap.put(inorder[i],i);}//构建树 前序数组 前序数组起始位置 前序数组末尾位置 中序数组起始位置 return myBuildTree(preorder, 0, preorder.length - 1, 0 );}public TreeNode myBuildTree(int[] preorder, int prebegin , int preend,int inbegin) {if ( prebegin > preend) {return null;}int preorder_root = prebegin; // 前序遍历中的第一个节点就是根节点int preindex = inorderMap.get(preorder[preorder_root]); // 在中序遍历中定位根节点TreeNode root = new TreeNode(preorder[preorder_root]); // 先把根节点建立出来int size_left_subtree = preindex - 1 -inbegin; // 得到左子树中的节点数目// 递归地构造左子树,并连接到根节点// 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素root.left = myBuildTree(preorder,prebegin +1,prebegin+1 + size_left_subtree,inbegin);// 递归地构造右子树,并连接到根节点// 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素root.right = myBuildTree(preorder,prebegin+1 + size_left_subtree+1,preend,preindex+1);return root;}
相关文章:

【LeetCode-中等题】105. 从前序与中序遍历序列构造二叉树
文章目录 题目方法一:递归 题目 方法一:递归 preorder [3,9,20,15,7] inorder [9,3,15,20,7] 首先根据 preorder 找到根节点是 3然后根据根节点将 inorder 分成左子树和右子树 左子树 inorder [9]右子树 inorder [15,20,7]这时候3是根节点 3的左子树…...

uniapp 配置网络请求并使用请求轮播图
由于平台的限制,小程序项目中不支持 axios,而且原生的 wx.request() API 功能较为简单,不支持拦截器等全局定制的功能。因此,建议在 uni-app 项目中使用 escook/request-miniprogram 第三方包发起网络数据请求。 官方文档…...

c#在MVC Api(.net framework)当中使用Swagger,以及Demo下载
主要的步骤就是创建项目,通过nuget 添加Swashbuckle包,然后在SwaggerConfig当中进行相关的配置。 具体的步骤,可以参考下面的链接: https://www.cnblogs.com/94pm/p/8046580.htmlhttps://blog.csdn.net/xiaouncle/article/detail…...

Linux 常见命令操作
一、目录管理 1.1 列出目录 ls # ls 命令 # -a 参数,查看全部的文件,包括隐藏的文件 # -l 参数,列出所有的文件,包括文件的属性和权限,不显示隐藏文件 [rootlocalhost /]# ls bin boot dev etc home lib lib64…...

前端实习第七周周记
前言 第六周没写,是因为第六周的前两天在处理第五周的样本库部分。问题解决一个是嵌套问题(因为我用到了递归),还有一个问题在于本机没有问题,打包上线接口404。这个问题我会在这周的总结中说。 第六周第三天才谈好新…...

DevOps理念:开发与运维的融合
在现代软件开发领域,DevOps 不仅仅是一个流行的词汇,更是一种文化、一种哲学和一种方法论。DevOps 的核心理念是通过开发和运维之间的紧密合作,实现快速交付、高质量和持续创新。本文将深入探讨 DevOps 文化的重要性、原则以及如何在团队中实…...

windows下Mysql安装配置教程
Mysql下载 在官网下载mysql community Server https://dev.mysql.com/downloads/mysql/ 可以选择下载压缩包或者MSI安装程序 使用压缩包安装 MySQL 压缩包安装通常需要以下步骤: 1. 下载 MySQL 安装包 你可以从 MySQL 官网上下载适合你系统的 MySQL 安装包&am…...

[开发|java] activeJdbc的model的isModified方法说明
在 ActiveJDBC 中,每个数据库表都对应一个继承自 org.javalite.activejdbc.Model 的类,该类用于表示数据库表中的记录。这些类允许您以面向对象的方式与数据库交互。 import org.javalite.activejdbc.Model;public class User extends Model {static {v…...

23062day6
作业:将dict.txt导入到数据库中。 方法1:创建shell脚本, 调用指令创建数据库和表格,使用循环在循环中用数组存储dict.txt的内容并插入表格中。 方法2:在终端创建数据库和表格,将dict.txt中的内容手动输入…...

MiniExcel
MiniExcel 是一个在 .NET 平台上用于操作 Excel 文件的库。它的特点是轻量级、简单易用,并且支持读取和写入 Excel 文件的功能。 使用 MiniExcel 可以进行以下操作: 读取 Excel 文件的数据,并将其转换为多维数组或实体对象。将多维数组或实…...

全球公链进展| Shibarium重新开放跨链桥提款;USDC计划在Polygon PoS等 6 个新区块链上推出
一周速览 过去一周,明星项目动态如下: Holesky 公共测试网创世文件已生成 Shibarium主网重新开放跨链桥提款 BNB Greenfield 测试网将于 8 月 31 日重置 BNB Smart Chain(BEP20)将进行网络升级及硬分叉 USDC 将在6个新区块链…...

关于C# halcon内存泄漏的研究
开发环境:Win7 VS2002 halcon12, 直接运行Debug的exe 不释放 private void butTemp_Click(object sender, EventArgs e) { HOperatorSet.SetSystem("clip_region", "false"); HObject region; …...

高精度地图定位在高速公路自动驾驶系统中的应用
近年来随着汽车保有量不断增加,随之而来的是: ( 1) 严重的交通拥堵,通行效率低下,用在通行上的时间不断增加; ( 2) 交通事故频发,交通事故导致的伤亡人数和费用不断增加,而且绝大多数事故是由人为因素导致的; ( 3) 大气…...

【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER
文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_PRIORI_DECIDER流程1. 对路程和时间进行采样以及速度限制2. 设计状态转移方程(cost计算)2.0 CalculateCostAt代价计算2.1 GetObstacleCost障碍物cost…...

R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化...
全文链接:http://tecdat.cn/?p30605 应用关联规则、聚类方法等数据挖掘技术分析治疗的中药专利复方组方配伍规律(点击文末“阅读原文”获取完整代码数据)。 方法检索治疗中药专利复方,排除外用中药及中西药物合用的复方。最近我们…...

3. MySql 5.7安装方式
服务器ip数据库版本硬件要求10.1.1.31mysql-boost-5.7.31.tar.gz2G/40G,内存不够需要开swap空间10.1.1.32mysql-boost-5.7.31.tar.gz2G/40G关闭swap swapoff -a && sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab 安装依赖 yum -y install make cmake gcc gcc-c++ bis…...

Flink 如何定位反压节点?
分析&回答 Flink Web UI 自带的反压监控 —— 直接方式 Flink Web UI 的反压监控提供了 Subtask 级别的反压监控。监控的原理是通过Thread.getStackTrace() 采集在 TaskManager 上正在运行的所有线程,收集在缓冲区请求中阻塞的线程数(意味着下游阻…...

LeetCode-1005-K次取反后最大化的数组和-贪心算法
题目描述: 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能的最大和 。 …...

Linux内核源码分析 (5)多处理器调度
Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注:本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA (非一致内存访问结构) 二、多核调度三、调度域和调度组四、SMP调度详…...

华为云云服务器评测|华为云云耀云服务器L实例使用教学
文章目录 教学小故事 教学 华为云云耀云服务器L实例是一款提供高效、可靠、安全的基础设施服务的云服务器。下面是使用教学: 登录华为云官网。 测评产品链接:https://www.huaweicloud.com/product/hecs-light.html 进入云耀云服务器管理控制台…...

这个在线网站让你三分钟制作出一份精美简历
今天,我要向大家推荐一个神奇的在线工具网站,它能够提供免费简历模板、简历范文,支持在线编辑,并且一键下载为PDF。这个工具让你的简历制作变得轻松便捷! 首先,这个网站的简历模板非常丰富多样。无论你是刚…...

Sql 函数传递参数 字符串拼接
使用场景 一个计算价格的函数,多个存储过程调用,因业务需求经常要新增参数,避免修改函数时程序执行存储过程报错,将多个参数拼接为一个字符串传递 -- 调用函数CalcuPrice(UnitPrice,CONCAT(MFQZC,MFQZC,&ItemNum,ItemNum,&am…...

java八股文面试[多线程]——两个线程交替打印1-100之间的数字
一份代码,两个线程,使用synchronize实现: 重写run()方法,将输出1到100之间整数的代码写到同步方法里。线程1进入到同步方法,输出一个整数后,阻塞并释放锁。线程2进入到同步方法,唤醒线程1&…...

gRPC之gRPC认证
1、gRPC认证 前面篇章的gRPC都是明文传输的,容易被篡改数据,本章将介绍如何为gRPC添加安全机制。 gRPC默认内置了两种认证方式: SSL/TLS认证方式 基于Token的认证方式 同时,gRPC提供了接口用于扩展自定义认证方式。 1.1 TLS…...

简易虚拟培训系统-UI控件的应用3
目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中,本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…...

语言模型(language model)
文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…...

【3.Vue子组件调用父组件方法】
1.概述 使用组件建抛出事件的方式来调用父组件的方法,不直接用this.$parent.function的方法,当然这种方式是可以的。 2.代码实现 2.1 父组件代码 父组件写一个方法给子组件调用 // 设备点击事件// equipId:设备id// leftValue:left值// topValue:top…...

算法系列-876-求链表的中间节点
求链表中间节点,如果有两个中间节点取后面那个 链表定义 // lc codestart /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(…...

h5 ws 客户端 监听ws服务器广播的信息
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>AI智能写作</title><!-- Bootstrap CSS --><meta charset"utf-8"><meta name"viewport" content"widt…...

网络基础之重中之重
目录 IP协议 编辑 基本概念: 协议头格式: 编辑 网段划分 DHCP : CIDR: 特殊的IP地址: IP地址的数量限制: 私有IP和公网IP 路由 路由的过程: 数据链路层 认识以太网&#x…...