java根据前、中序遍历结果重新生成二叉树
1、首先写一个类表示二叉树
public class TreeNode {int num;TreeNode left;TreeNode right;public TreeNode(int num) {this.num = num;}}
2、根据前,中序遍历,在控制台我们可以得到两个结果pre 和 in:
/*** 前序遍历* @param node*/public static void PreTree(TreeNode node){if (node == null){return;}System.out.println(node.val);PreTree(node.left);PreTree(node.right);}/*** 中序遍历* @param node*/public static void MidTree(TreeNode node){if (node == null){return;}PreTree(node.left);System.out.println(node.val);PreTree(node.right);}public static void main(String[] args) {TreeNode head = new TreeNode(1);head.left = new TreeNode(2);head.right = new TreeNode(3);head.left.left = new TreeNode(4);head.left.right = new TreeNode(5);int[] pre = {1, 2, 4, 5, 3};int[] in = {2, 4, 5, 1, 3};}
3、接下来编写构建二叉树的方法:
/*** 根据先序和中序遍历结果建出一颗树* 先序结果是:pre[L1...R1], 中序结果是[L2...R2]*/public static TreeNode buildTreeNode(int[] pre, int[] in){if (pre == null || in == null || pre.length != in.length){return null;}return f(pre, 0, pre.length-1, in, 0, in.length-1);}/*** int[] pre = {1, 2, 4, 5, 3};* int[] in = {2, 4, 5, 1, 3};*/public static TreeNode f(int[] pre, int L1, int R1, int[] in, int L2, int R2){if (L1 > R1){return null;}// 根节点等于前序遍历的第一个数TreeNode head = new TreeNode(pre[L1]);if (L1 == R1){return head;}int find = L2;while (in[find] != pre[L1]){find++;}head.left = f(pre,L1 + 1, L1 + find - L2, in, L2, find - 1);head.right = f(pre, L1 + find - L2 + 1, R1, in, find+1, R2);return head;}
4、由于上面使用了while循环遍历,该方法还可以进一步优化为:
/*** 根据先序和中序遍历结果建出一颗树* 先序结果是:pre[L1...R1], 中序结果是[L2...R2]*/public static TreeNode buildTreeNode1(int[] pre, int[] in){if (pre == null || in == null || pre.length != in.length){return null;}HashMap<Integer, Integer> valueIndexMap = new HashMap<>();for (int i = 0; i < in.length; i++) {valueIndexMap.put(in[i], i);}return g(pre, 0, pre.length-1, in, 0, in.length-1, valueIndexMap);}public static TreeNode g(int[] pre, int L1, int R1, int[] in, int L2, int R2, HashMap<Integer, Integer> valueIndexMap){if (L1 > R1){return null;}TreeNode head = new TreeNode(pre[L1]);if (L1 == R1){return head;}int find = valueIndexMap.get(pre[L1]);head.left = g(pre,L1 + 1, L1 + find - L2, in, L2, find - 1, valueIndexMap);head.right = g(pre, L1 + find - L2 + 1, R1, in, find+1, R2, valueIndexMap);return head;}
相关文章:
java根据前、中序遍历结果重新生成二叉树
1、首先写一个类表示二叉树 public class TreeNode {int num;TreeNode left;TreeNode right;public TreeNode(int num) {this.num num;}}2、根据前,中序遍历,在控制台我们可以得到两个结果pre 和 in: /*** 前序遍历* param node*/public st…...
利用检测结果实现半自动标注
1. 将目标检测结果保存为xml格式 #-----------------------------------------------------------------------------------# # 下面定义了xml里面的组成模块,无需改动。 #-----------------------------------------------------------------------------------…...
Android修行手册 - 万字梳理JNI开发正确技巧和错误缺陷
JNI 简介 JNI,Java Native Interface,是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code;在 native code 中嵌入 Java 虚拟机调用 Java 的代码。 它支持将 Java 代码与使用其他…...
C++学习 --类和对象之继承
目录 1, 继承的语法 1-1, 继承方式 1-1-1, 公共继承public 1-1-2, 私有继承private 1-1-3, 保护继承protected 2, 父类,子类同名属性处理 2-1, 成员变量同名 2-2, 成员函数同…...
Redis之缓存
文章目录 前言一、缓存使用缓存的原因 二、使用缓存实现思路提出问题 三、三大缓存问题缓存穿透缓存雪崩缓存击穿互斥锁实现逻辑过期时间实现 总结 前言 本篇文章即将探索的问题(以黑马点评为辅助讲解,大家主要体会实现逻辑) 使用redis缓存的…...
Redis6的IO多线程分析
性能测试 机器配置 C Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 14 On-line CPU(s) list: 0-13 Mem: 62G性能 配置推荐 官方表示,当使用redis时有性能瓶…...
kali linux安装教程
安装 Kali Linux 非常简单,下面是基本的步骤: 首先下载 Kali Linux 的 ISO 镜像文件。你可以从官方网站 https://www.kali.org/downloads/ 下载。 确保你的计算机支持使用盘或者 USB 启动。你可以在计算机开机时按下 F12 或者其他类似的按键,…...
React进阶之路(四)-- React-router-v6、Mobx
文章目录 ReactRouter前置基本使用核心内置组件说明编程式导航路由传参嵌套路由默认二级路由404路由配置集中式路由配置 Mobx什么是Mobx环境配置基础使用observer函数*计算属性(衍生状态)异步数据处理模块化多组件数据共享Mobx和React职责划分 ReactRout…...
55基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲(椒盐)噪声
基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲(椒盐)噪声五组噪声模型,程序已调通,可直接运行。 55高斯噪声、瑞利噪声 (xiaohongshu.com)...
Codeforces Round 908 (Div. 2)视频详解
Educational Codeforces Round 157 (A--D)视频详解 视频链接A题代码B题代码C题代码D题代码 视频链接 Codeforces Round 908 (Div. 2)视频详解 A题代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << "…...
电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计
电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计 6、电路综合-基于简化实频的SRFT微带线切比雪夫低通滤波器设计中介绍了使用微带线进行切比雪夫滤波器的设计方法,在此对集总参数的切比雪夫响应进行分析。 SRFT集总参数切比雪夫低通滤波器综合不再需要…...
Linux系统编程——实现cp指令(应用)
cp指令格式 cp [原文件] [目标文件] cp 1.c 2.c 功能是将原文件1.c复制后并改名成2.c(内容相同,实现拷贝) 这里需要引入main函数的参数解读: 我们在定义函数时许多都带有参数,输入参数后便可进行定义函数内的功能执行,而main…...
20231112_DNS详解
DNS是实现域名与IP地址的映射。 1.映射图2.DNS查找顺序图3.DNS分类和地址4.如何清除缓存 1.映射图 图片来源于http://egonlin.com/。林海峰老师课件 2.DNS查找顺序图 3.DNS分类和地址 4.如何清除缓存...
使用ssh上传数据到阿里云ESC云服务上
在这之前需要安装 ssh2-sftp-client 直接在终端输入:npm i ssh2-sftp-client 直接上代码: const path require(path); const Client require(ssh2-sftp-client);// 配置连接参数 const config {host: your-server-ip, // 云服务器的IP地址port: 22, …...
【408】计算机学科专业基础 - 数据结构
数据结构知识 绪论 数据结构在学什么 如何用程序代码把现实世界的问题信息化 如何用计算机高效地处理这些信息从而创造价值 数据结构的基本概念 什么是数据: 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序…...
SpringSpringBoot自动装配
文章目录 spring自动装配的好处Spring框架提供了三种自动装配的方式:Springboot自动装配Springboot自动装配的原理 spring自动装配的好处 Spring的自动装配(Autoscan or Autowiring)在开发中带来了多方面的好处,使得应用程序更加…...
k8s 部署mqtt —— 筑梦之路
mqtt是干嘛的,网上有很多资料,这里就不再赘述。 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: mqttname: mqttnamespace: default spec:replicas: 1selector:matchLabels:app: mqttstrategy:rollingUpdate:maxSurge: 25%maxUnavaila…...
模型部署:量化中的Post-Training-Quantization(PTQ)和Quantization-Aware-Training(QAT)
模型部署:量化中的Post-Training-Quantization(PTQ)和Quantization-Aware-Training(QAT) 前言量化Post-Training-Quantization(PTQ)Quantization-Aware-Training(QAT) 参…...
C++模板元模板(异类词典与policy模板)- - - 题目答案
目录 一、书中第一题 二、书中第三题 三、书中第五题 四、书中第六题 五、书中第七题 六、书中十一题 七、书中十二题 八、 书中十三题 总结 一、书中第一题 #include <iostream>template <typename T, size_t N> struct NSVarTypeDict {static void Cre…...
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
在前文中,我们介绍了组合模式的基本原理和应用,以及它在构建对象结构中的价值和潜力。然而,组合模式的魅力远不止于此。在本文中,我们将继续探索组合模式的进阶应用,并展示它与其他设计模式的结合使用,以构…...
LAYONTHEGROUND看
一、什么是requests? requests 是一个用于发送HTTP请求的 Python 库。 它可以帮助你: 轻松发送GET、POST、PUT、DELETE等请求 处理Cookie、会话等复杂性 自动解压缩内容 处理国际化域名和URL 二、应用场景 requests 广泛应用于以下实际场景: …...
[具身智能-318]:分词 (Tokenization)原理和代码示例
分词(Tokenization)是大语言模型(LLM)的“第一公里”,它的核心任务是将人类可读的自然语言文本,转换为模型能够理解和处理的数字序列。简单来说,分词器(Tokenizer)就是一…...
Windows系统下FFmpeg的安装与环境配置指南
前言 FFmpeg作为开源多媒体处理领域的标杆工具,其安装配置是音视频开发的基础环节。 一、安装流程详解 1、下载预编译版本 通过FFmpeg官方下载页面获取Windows版本,推荐选择: Gyan/BtbN构建版本:包含完整编解码器支持 static…...
稀缺资源!农业农村部试点项目PHP可视化配置规范白皮书(内部解密版·仅限本期订阅用户获取)
第一章:农业农村部试点项目PHP可视化配置规范白皮书概述 本白皮书面向农业农村部“数字乡村基础设施能力提升”试点项目,聚焦PHP后端服务在农业物联网平台、基层农情填报系统及涉农数据中台等场景中的可视化配置实践。其核心目标是统一配置管理范式&…...
外卖霸王餐API接口架构设计思路分析
外卖霸王餐API接口架构设计思路分析 对于开发者而言,构建一套高并发、高可用的外卖霸王餐API接口架构,是实现流量主与外卖平台(美团、饿了么)数据互通的关键。本文将基于俱美开放平台(http://www.baodanbao.com.cn)的技术实践&am…...
连续血糖监测数据集终极指南:解锁糖尿病研究的标准化数据宝库
连续血糖监测数据集终极指南:解锁糖尿病研究的标准化数据宝库 【免费下载链接】Awesome-CGM List of CGM datasets 项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-CGM 在精准医疗与人工智能交叉融合的时代,连续血糖监测(CGM&a…...
从 Apache SeaTunnel 走向 ASF Member:一位开发者的长期主义样本凡
一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...
25大数据 6-1 for循环
嵌套if if 判断条件1:if 判断条件2:执行语句1else:执行语句2 else:if 判断条件3:执行语句3else:执行语句4驾照资格审核 1.检查年龄是否达标 >18岁 a.如果年龄达标,检查视力是否合格 >0.8 合格返回 可以参加考试 b.否则 不能参加考试 2.如果年龄不达标 <18 …...
ROS2核心概念与架构详解:从零开始机器人操作系统(1)
一、顶级架构一句话总结节点 → DDS通信 → 话题/服务/动作 → 参数 → 工具链 → 机器人应用ROS2(Robot Operating System 2)是新一代开源机器人操作系统,采用DDS作为通信中间件,去掉了ROS1的Master节点,提供更好的实…...
书匠策AI:论文写作界的“智能导航仪”,让课程论文创作如行云流水!
在学术的征途中,每一篇课程论文都是一次智慧的探险,既充满挑战也孕育着成长的喜悦。然而,面对浩瀚的知识海洋和复杂的写作规范,许多学子常常感到力不从心,甚至迷失方向。别怕,今天我要为你揭秘一位论文写作…...
